我们可以在SQL if语句的一部分中添加注释吗?

时间:2020-03-06 14:44:53  来源:igfitidea点击:

我只想在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中,但是在Oracle PL / SQL中,我们会将NULL语句放在不希望执行任何操作的块中:

BEGIN
  -- This is a comment
  NULL;
END

不,我们不能有一个空的if块(或者仅包含注释的if块)。

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

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

这不是评论。这是因为我们有一个空的if块。我们必须在其中至少有一个声明。最好在印刷说明中注明。

由于我们不能有一个"空"的块(感谢Charles Graham),因此我将在if语句上方放置一条注释,以表示有条件的意图(感谢BlackWasp),然后在begin..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

在我们希望删除约束的项目周围设计SQL语句会更好吗?因此,如果我们希望删除此功能,则

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

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

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

我知道它不能回答我们是否可以在块内仅添加注释的原始问题,但是为什么不反转条件,以便仅在<>'PK'时才执行块?

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