繁体   English   中英

用于检查列是否存在的案例表达式抛出无效的列名错误

[英]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.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM