MS-SQL Server:为什么Update-Statement在If-Block中不起作用?

时间:2017-10-30 14:17:51

标签: sql-server tsql

为什么以下不起作用?

即使if语句的计算结果为false,也始终执行update语句。如果我删除更新语句,代码工作正常。

这样做的正确方法是什么?

IF (SELECT count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'FOO' AND COLUMN_NAME ='BAR') = 1  
    BEGIN
        UPDATE FOO SET BAZ = BAR;
        alter table FOO alter column BAZ int not null;
    END

2 个答案:

答案 0 :(得分:0)

IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE  TABLE_SCHEMA ='dbo' AND TABLE_NAME = 'FOO' AND COLUMN_NAME ='BAR')  
    BEGIN
        UPDATE FOO SET BAZ = BAR;
        alter table FOO alter column BAZ int not null;
    END

答案 1 :(得分:0)

诀窍是将UPDATE语句包装在EXEC sp_executesql N语句中。不要忘记添加两个'在UPDATE语句周围。

IF (SELECT count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'FOO' AND COLUMN_NAME ='BAR') = 1  
    BEGIN
        EXEC sp_executesql N'UPDATE FOO SET BAZ = BAR';
        alter table FOO alter column BAZ int not null;
    END

这可以按预期工作。