sql - UPDATE 语句包含在 IF EXISTS block 中

标签 sql sql-server tsql

我正在尝试编写一个更新列的 DML 脚本,但我想确保该列首先存在,因此我将其包装在 IF EXISTS block 中

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Client' AND COLUMN_NAME='IsClarityEnabled') 
BEGIN
    UPDATE Client SET IsClarityEnabled = 1 WHERE ClientID = 21
END

所以奇怪的是,即使不满足条件,它也会尝试执行更新。因此列不存在并且 UPDATE 语句运行并且我收到错误。为什么?

更奇怪的是,这确实有效:

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Client' AND COLUMN_NAME='IsClarityEnabled') 
BEGIN
    EXEC('UPDATE Client SET IsClarityEnabled = 1 WHERE ClientID = 21')
END

UPDATE 命令有什么特殊之处导致它出现这种行为吗?

最佳答案

问题在于脚本将被编译/解析,如果该列不存在,则会出现编译/解析错误。

Invalid column name 'IsClarityEnabled'.

关于sql - UPDATE 语句包含在 IF EXISTS block 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2586737/

相关文章:

c# - LINQ:Include 子句导致两个左连接,而本应有一个

c# - SignalR sqlServer监听

sql - 在 T-SQl 中使用 Like 来搜索由未知数量的空格分隔的单词

sql - 使用 SELECT * FROM X WHERE Y is not NULL 替换查询

mysql - 对嵌套 SQL Oracle 查询中的多行值求和

sql - 无法绑定(bind)多部分标识符

sql - 是否可以计算 group by 中一列的总和?

sql - "column IN (X)"与 "column = X"——它会影响查询性能吗?

c# - SQL语法错误: Remove/Disclude Apostrophe's?

SQL 服务器 : how to split a string using a comma as a separator