If Exists 语句不起作用
If Exists statement not working
我正在 Sql 服务器 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
块。
exists
语句有效。问题是update
。您的代码 在 之前被编译 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 服务器尝试编译存储过程但未能成功。应用一点动态 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
我正在 Sql 服务器 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
块。
exists
语句有效。问题是update
。您的代码 在 之前被编译 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 服务器尝试编译存储过程但未能成功。应用一点动态 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