这是我的代码:
CREATE TABLE [dbo].[TestTable](
ColumnA VARCHAR(20),
ColumnB VARCHAR(20))
INSERT INTO TestTable
SELECT 'TestA', 'TestB'
IF COL_LENGTH('TestTable', 'ColumnC') IS NOT NULL
BEGIN
PRINT 'ColumnC Present'
SELECT ColumnC FROM TestTable
END
正如您所看到的,它应该只查询ColumnC是否实际存在。然而,mgmt studio阻止整个查询的执行。 基本上我想要的是在此列存在时查询ColumnC的值。我正在为多个版本的软件编写查询,有些版本的旧版本没有旧版本。
答案 0 :(得分:1)
这不是关于如何检查列的存在。相反,这是关于表和列名称的飞行前SQL检查。
我无法弄清楚如何使IF ELSE块工作,所以我选择基于COL_LENGTH制作动态SQL语句。
这是我使用的实际解决方案。 (我的真实查询使用CTE,所以我必须确保它与CTE一起正常工作)
DECLARE @IsBroken VARCHAR(20)
SET @IsBroken = 'ColumnB'
IF COL_LENGTH('TestTable', 'ColumnC') IS NOT NULL
BEGIN
PRINT 'ColumnC Present'
SET @IsBroken = 'ColumnC'
END
DECLARE @SQLStatement VARCHAR(MAX)
SET @SQLStatement = '
;WITH UpdateTypes AS
(
SELECT ' + @IsBroken + ' FROM TestTable
)
SELECT * FROM UpdateTypes'
PRINT @SQLStatement
EXEC (@SQLStatement)