IF之后执行了多少行代码?

5
考虑一个 SQL 脚本的一部分,如下所示:

IF OBJECT_ID('dbo.tableName', 'U') IS NOT NULL
ALTER TABLE [dbo].[tableName]
DROP CONSTRAINT PK_tableName
DROP TABLE dbo.tableName

如果tableName存在,那么所有三行代码都会被执行吗?那么我的脚本下面的其余部分呢(未包含 - 它创建了表);是否有办法限制在IF语句之后执行的行数?我无法找到答案,因为这是一个相当模糊的搜索。

7
使用 begin...end - juergen d
1
你不应该计算行数,而应该计算语句。在 IF 关键字和其条件之后的 Transact-SQL 语句将在条件满足时执行。如果你想要执行更多的语句,请像上面建议的那样使用 BEGIN..END。 - sepupic
这里仅包含ALTER TABLE。请参阅文档 - DavidG
可能是SQL“IF”,“BEGIN”,“END”,“END IF”?的重复问题。 - Valerica
@Mr JF请查看第一个答案,它有你需要的解释。 - Valerica
谢谢大家 :) - Syntax Error
2个回答

6
请按照以下方式操作:
IF OBJECT_ID('dbo.tableName', 'U') IS NOT NULL
    BEGIN
        ALTER TABLE [dbo].[tableName]
        DROP CONSTRAINT PK_tableName;
        DROP TABLE dbo.tableName;
    END

如果不使用 BEGINEND 块,只有第一条 SQL 语句会在 IF 条件下执行,而最后一条 SQL 语句将每次运行时执行,并且如果 tableName 不存在,则会出现错误。


2

只有第一个查询被执行。如果需要多于1个查询,则需要使用BEGIN - END块。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接