SQL 条件列存在性

EdG*_*man 5 sql exists conditional-statements

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

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
Run Code Online (Sandbox Code Playgroud)

现在,它会返回“Msg 207 无效的列名”错误。

也许可以选择忽略该错误?

ArB*_*rBR 4

您可以使用动态 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 Column1 AS TheColumn1, MyColumn from MyView"
END
ELSE
BEGIN
    select  @sql = "SELECT Column1 AS TheColumn1, null AS MyColumn from MyView"
END 

-- executes dynamic sql
EXEC @sql
Run Code Online (Sandbox Code Playgroud)

  • 您的示例中不需要动态 SQL!`if`/`else` 就足够了。 (2认同)