SQL Server: if column exists;无效的列名



我需要编写一个查询,将在不同版本的数据库上运行。有些有一列叫做Delflag,有些没有。如果该列存在,则应将其包含在select语句和WHERE子句中。

我用下面的代码试了试:

IF EXISTS 
(
SELECT * 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_name = 'Bericht'
AND column_name = 'DelFlag'
)
...
ELSE
...

在IF块中,我包含了列。在ELSE块中没有提到它。但是,如果列不存在,我就会得到一个错误"Msg 207 -无效的列名"。我检查了列名只包含在IF EXISTS块中。

我试图选择和过滤列,如果它存在,如果不只是离开部分。我期望查询在不同的数据库上运行,其中列有时存在,有时不存在。如果列存在,则运行;如果列不存在,则抛出

Msg 207
无效的列名

查询在绑定阶段失败,因为您引用的列不存在。

您将使用动态sql根据您的逻辑检查构建字符串,然后使用sp_executesql

执行结果字符串这看起来像

DECLARE @sql NVARCHAR(MAX) = 'SELECT ColumnA, ColumnB';
IF EXISTS 
(
SELECT * 
FROM   INFORMATION_SCHEMA.COLUMNS 
WHERE  table_name = 'Bericht' AND 
column_name = 'DelFlag'
)
BEGIN
SET @sql += ', DelFlag';
END
SET @sql += ' FROM Bericht;';
EXEC sp_executesql @command = @sql;

最新更新