【问题标题】:Can you have just a comment in a block of your SQL if-statement?你能在你的 SQL if 语句块中添加一个注释吗?
【发布时间】:2010-09-13 06:00:46
【问题描述】:

我想在我的 if 语句块中添加一个注释,但我在尝试时遇到错误。我想更像史蒂夫·麦康奈尔。

declare @ConstraintName varchar(255)
set @ConstraintName = 'PK_Whatever'

IF LEFT(@ConstraintName, 2) = 'PK'
BEGIN
    --can't drop primary keys
END

我得到的错误是:

Incorrect syntax near 'END'.

如果我在评论后添加一些东西,即PRINT @ConstraintName,它可以正常工作。

【问题讨论】:

  • 更像史蒂夫·麦康奈尔是什么意思?
  • 我认为他的意思是他想评论为什么在这种特殊情况下什么都没做

标签: sql-server tsql


【解决方案1】:

不,你不能有一个空的 if 块(或一个只包含 cmets 的块)。

你没有说你为什么想要这个。如果你只是想注释掉 if 的内容进行调试,你应该注释整个 if。

【讨论】:

    【解决方案2】:

    SELECT NULL 将生成结果集并可能影响客户端应用程序。做一些没有效果的事情似乎更好,比如:

    IF LEFT(@ConstraintName, 2) = 'PK'
    BEGIN
      DECLARE @Dummy bit -- Do nothing here, but this is required to compile
    END
    

    【讨论】:

      【解决方案3】:

      我不能肯定地说在 SQL Server 中,但在 Oracle PL/SQL 中,您可以将 NULL 语句放在一个您什么都不想做的块中:

      BEGIN
        -- This is a comment
        NULL;
      END
      

      【讨论】:

      • 更新了标题。我只想在条款中发表评论。
      • 是的,我的意思是您可以添加注释,并包含 NULL 语句(如果它存在于 SQL Server 中)以绕过编译错误。我将编辑我的示例以使其更清晰
      • 好主意,不幸的是它在 t-sql 中不起作用(至少在 SQL2005 兼容性方面)。
      【解决方案4】:

      这里有好的提示:How to do nothing in SQL Server

      BEGIN
        DONOTHING:
      END
      

      所以你只是在定义一个标签。

      【讨论】:

        【解决方案5】:

        不,我认为你不能。如果您想暂时将其注释掉,您可能只需要在整个语句周围加上 /* ... */。

        【讨论】:

          【解决方案6】:

          这不是评论。那是你有一个空的 if 块。你必须在那里至少有一个声明。加入打印声明可能是您最好的选择。

          【讨论】:

            【解决方案7】:

            因为你不能有一个“空”块(感谢查尔斯格雷厄姆),我将在 if 语句上方放置一条评论以说明条件的意图(感谢 BlackWasp),然后在开始时添加评论..end 描述虚拟声明的块(感谢 GiLM)。

            你认为我应该这样评论代码吗?

            declare @ConstraintName varchar(255)
            set @ConstraintName = 'PK_Whatever'
            
            --can't drop primary keys
            IF LEFT(@ConstraintName, 2) = 'PK'
            BEGIN
                --do nothing here
                DECLARE @Dummy bit --required to compile
            END
            

            【讨论】:

              【解决方案8】:

              围绕您希望放弃约束的项目设计 SQL 语句不是更好吗?因此,如果您想删除此功能,那么

              If left(@constraintname,2 <> 'PK'
              BEGIN
                   -- Drop your constraint here
                   ALTER TABLE dbo.mytable DROP constraint ... -- etc
              END
              

              【讨论】:

                【解决方案9】:

                我知道它不能回答您最初的问题,即您是否可以在块内仅放置评论,但为什么不反转您的条件,以便该块仅在 'PK' 时执行?

                -- drop only if not primary
                IF LEFT (@ConstraintName, 2) <> 'PK'
                BEGIN
                    --do something here
                END
                

                【讨论】:

                  猜你喜欢
                  • 2013-02-22
                  • 2011-04-02
                  • 2010-12-19
                  • 2010-09-17
                  • 2021-05-17
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多