如果存在声明不起作用

时间:2015-02-21 11:13:19

标签: sql sql-server-2012

我正在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'))

执行两个语句会出现错误Invalid column name Age

不明白为什么它会进入Begin区块。

2 个答案:

答案 0 :(得分:4)

exists声明正在发挥作用。问题是update。在运行if之前,您的代码正在编译。因此,错误发生在编译阶段。

您可以使用动态SQL解决此问题:

IF EXISTS (SELECT *
           FROM INFORMATION_SCHEMA.COLUMNS
           WHERE TABLE_NAME = 'Table1' AND COLUMN_NAME = 'Age')
begin
  Print 'in'
  exec sp_execute_sql N'Update Table1 set Age = Null';
End;

答案 1 :(得分:0)

执行时,SQL Server会尝试编译存储过程,但无法执行此操作。应用一点动态sql将解决您的问题:

IF  EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Table1' AND COLUMN_NAME = 'Age')
begin
  Print 'in'
  EXEC sp_executesql 'Update Table1 set Age = Null'
End