我们可以在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