我有下面的示例代码。假设我不知道表中是否存在特定列,如果表中不存在该列,我如何以可以将列值默认为"不可用"的方式编写查询?
示例:
select COL1, COL2,
CASE
WHEN OBJECT_ID('COL3') IS NULL THEN 'Not Available'
ELSE COL3
END AS COL3
from TABLE1
提前谢谢。
这很难做到(没有动态SQL(,但是有一种方法可以在SQL中使用范围规则。 您可以执行此操作,假设您在表中具有唯一键或主键:
select t1.col1, t1.col2,
(select col3 -- no alias!
from table1 tt1
where tt1.id = t1.id -- the primary/unique key
) col3
from table1 t1 cross join
(values ('Not Available')) v(col3) -- same name
子查询将从子查询中的table1
中获取col3
(如果存在(。 否则,它将联系并从values()
条款中找到col3
。