UPDATE语句包含在IF EXISTS块中

ant*_*ant 5 sql t-sql sql-server

我正在尝试编写一个更新列的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
Run Code Online (Sandbox Code Playgroud)

所以奇怪的是,即使条件失败,它也会尝试执行更新.所以列不存在,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
Run Code Online (Sandbox Code Playgroud)

UPDATE命令有什么特别之处导致它以这种方式运行吗?

Adr*_*der 6

问题是脚本将被编译/解析,如果列不存在,您将遇到编译/解析错误.

列名称"IsClarityEnabled"无效.