0

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

显然,我把这些 BEGIN 和 ENDS 搞混了。

我正在使用 Microsoft SQL Server 2008 R2。我不确定这些BEGINS 和ENDs 的语法。

请不要介意条件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
4

2 回答 2

3

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

于 2013-11-12T17:18:00.127 回答
0

这是一种更简单的方法来执行您似乎正在尝试的操作。

  insert into StringCategory
  (ResourceKey, CategoryId)
  select 18134, 0
  where not exists (
  SELECT * 
  FROM StringCategory 
  WHERE ResourceKeyId = 18134 
  AND CategoryId = 0)
于 2013-11-12T17:30:47.683 回答