小编典典

包装在IF EXISTS块中的UPDATE语句

sql

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

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行为如此的UPDATE命令有什么特别之处吗?


阅读 283

收藏
2021-04-22

共1个答案

小编典典

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

无效的列名称“ IsClarityEnabled”。

2021-04-22