我正在尝试编写更新列的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命令有什么特别之处吗?
问题在于脚本将被编译/解析,并且如果该列不存在,则将出现编译/解析错误。
无效的列名称“ IsClarityEnabled”。