T-SQL和决策构造

时间:2013-11-12 17:14:48

标签: sql tsql sql-server-2008-r2

请帮我解决此查询的语法。它不编译。它说关键字END附近有语法错误。

显然,我已经将这些BEGIN和ENDS混淆了。

我正在使用Microsoft SQL Server 2008 R2。我不确定这些BEGIN S和END s的语法。

请注意条件1 = 0。这是稍后将用适当的谓词替换的东西。

IF EXISTS (SELECT * FROM StringCategory WHERE ResourceKeyId = 18134 AND CategoryId = 0)
    BEGIN
        UPDATE StringCategory
        SET CategoryId = 0
        WHERE ResourceKeyId = 18134
    END
ELSE
    BEGIN
        IF 1 = 0
            BEGIN
            DELETE FROM StringCategory WHERE ResourceKeyId = 18134
            END
        ELSE
            BEGIN
            INSERT INTO StringCategory
            VALUES(18134, 0)
            END
    END
END

2 个答案:

答案 0 :(得分:3)

你的最后一个END是额外的。您可以将C#中的{和}等BEGIN和END视为IF构造(它们用于标记要在IF / ELSE语句中执行的块的开头和结尾)。

答案 1 :(得分:0)

这是一种更简单的方法来执行您的尝试。

  insert into StringCategory
  (ResourceKey, CategoryId)
  select 18134, 0
  where not exists (
  SELECT * 
  FROM StringCategory 
  WHERE ResourceKeyId = 18134 
  AND CategoryId = 0)