[英]Case expression to check if column exists throws invalid column name error
我正在构建一个每天运行的存储过程。 由于向我提供数据的方式,有时 output 所需的一些列不在导入到临时表的文件中。
对于 output,该值可以为 null/空,但实际列必须存在。
我试过以下代码:
select
case
when exists(
select * from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'tableName' and COLUMN_NAME = 'ABC'
) then ABC
else ''
end
as 'XYZ' from tableName
我知道一个事实,即在我运行的测试中,列不存在,所以我期望 SELECT 语句只为 XYZ 列返回一个空字符串。
但是,当运行这样的 SELECT 语句时,出现以下错误:
列名称“ABC”无效。
因为我从一开始就知道 ABC 列不存在,所以我期望 EXISTS(...) 的计算结果为 FALSE 并直接跳转到 ELSE 语句。 但是,似乎仍在评估列名。
我该如何解决这个问题?
我相信由于@MartinSmith 提供的解决方法( https://dba.stackexchange.com/questions/66741/why-cant-i-use-a-case-statement-to-see-if- a-column-exists-and-not-select-from-i/66755#66755 )
我最终使用了提供的解决方法的替代版本,由 @MartinSmith 的解决方案的海报链接,但结果似乎是我所期望的。
关于Only one expression can be specified in the select list when the subquery is not introduced with EXISTS
错误,这是由我尝试 SELECT 子查询中的两列引起的。 解决方案来自这里: https://stackoverflow.com/a/7684626/18191554
现在,我的代码如下:
select
.
.
.
.
(select (SELECT [ABC]
from dbo.tableName
where ID = temp.ID])
from (select '' as [ABC]) as dummy)
as 'XYZ',
.
.
.
from tableName
其中 ABC 是可能存在也可能不存在的列。
感谢所有参与的人
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.