我正在尝试编写一个更新列的 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/