sql server如果语句不起作用

时间:2015-05-08 12:43:20

标签: sql sql-server if-statement sql-update

任何人都可以告诉我以下SQL服务器update语句有什么问题:

IF (SELECT * FROM TBL_SystemParameter WHERE code='SOUND_WRONG_GARMENT') = ''
GO
UPDATE TBL_SystemParameter 
SET [Value] = 'Ping.wav' 
WHERE ID = (SELECT ID 
            FROM TBL_SystemParameter 
            WHERE code = 'SOUND_WRONG_GARMENT')

3 个答案:

答案 0 :(得分:4)

您不需要if语句 - 您可以只运行update语句,如果子查询没有返回任何行,则不会更新任何行。 if不会真正保存任何内容 - 您正在执行两个查询而不是一个查询。

答案 1 :(得分:2)

虽然Mureinik的答案是对此的合理解决方案,但我会回答为什么这实际上并没有起作用。您的情况有误,而且这种方法可以使用IF EXISTS

IF EXISTS (SELECT * FROM TBL_SystemParameter WHERE code='SOUND_WRONG_GARMENT')
    BEGIN
        UPDATE TBL_SystemParameter 
        SET [Value] = 'Ping.wav' 
        WHERE ID IN (SELECT ID 
            FROM TBL_SystemParameter 
            WHERE code = 'SOUND_WRONG_GARMENT')
    END

作为旁注,您使用=符号代替IN,这意味着您将匹配任意单个ID,并且仅基于此更新1行。要使用基于集合的操作,请使用IN子句。

你可以通过完全取消派生的查询,并在你正在更新的表格上使用简单的WHERE code='SOUND_WRONG_GARMENT'来实现“高尔夫”。

答案 2 :(得分:2)

你要么

UPDATE TBL_SystemParameter 
SET [Value] = 'Ping.wav' 
WHERE ID In (SELECT ID 
        FROM TBL_SystemParameter 
        WHERE code = 'SOUND_WRONG_GARMENT')

如果该代码有多个ID,请使用

UPDATE TBL_SystemParameter 
SET [Value] = 'Ping.wav' 
WHERE code = 'SOUND_WRONG_GARMENT'
无论如何都会丢失IF声明,因为@Mureinik说。