我正在 Sql server 2012 上执行以下语句。但即使列不存在,它仍然会执行
IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Table1' AND COLUMN_NAME = 'Age')
begin
Print 'in'
Update Table1 set Age = Null
End
我也在下面尝试过
if exists(select * from sys.columns
where Name = 'Age' and Object_ID = Object_ID('Table1'))
执行这两个语句都会出现错误无效的列名 Age
不明白为什么它会进入 Begin
block 。
最佳答案
exists
语句正在运行。问题在于更新
。您的代码在 if
运行之前被编译。所以,错误发生在编译阶段。
您可以使用动态 SQL 来修复此问题:
IF EXISTS (SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Table1' AND COLUMN_NAME = 'Age')
begin
Print 'in'
exec sp_executesql N'Update Table1 set Age = Null';
End;
关于sql - 如果存在语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28645091/