SQL条件列存在

时间:2010-12-06 16:47:50

标签: sql conditional exists

如果视图中存在列,我可以以某种方式选择列,但如果列不存在则忽略该列吗?

SELECT
    CASE
        WHEN EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyView' AND COLUMN_NAME = 'MyColumn')
            THEN MyView.MyColumn
        ELSE NULL
    END AS [Sometimes]
FROM
    MyView

现在,它返回“消息207无效列名称”错误。

也许可以忽略该错误的一些选项?

3 个答案:

答案 0 :(得分:3)

您可以使用动态SQL

来完成此操作
declare @sql varchar(200)   
IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyView' AND COLUMN_NAME = 'MyColumn') 
BEGIN
    select  @sql = "SELECT Column1m Column2, MyColum from MyView"
END
ELSE
BEGIN
    select  @sql = "SELECT Column1m Column2, null as MyColum from MyView"
END 

-- executes dynamic sql
EXEC @sql

答案 1 :(得分:1)

不,这是不可能的。必须编译列访问,如果没有别的话,这会在抑制它的表达式被评估之前发生。您需要为此动态生成SQL。

答案 2 :(得分:1)

你能做的最好的事情是

if EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyView' AND COLUMN_NAME = 'MyColumn')
Select MyView.MyColumn from MyView
else
Select NULL MyColumn