1

TechNet 的 BEGIN...END 描述让我对以下评论感到困惑:

尽管所有 Transact-SQL 语句在 BEGIN...END 块中都有效,但某些 Transact-SQL 语句不应在同一个批处理(语句块)中组合在一起。

https://technet.microsoft.com/en-us/library/aa225998(v=sql.80).aspx

谁能告诉我为什么不应该将它们分组在 BEGIN ... END 块中?当我使用 BEGIN...END 作为以下建议创建区域时是否有任何问题:sql server #region

4

3 回答 3

1

BEGIN..END不是用于折叠区域的视觉选项,您实际上是在告诉服务器这些行是在一起的。将其用作 #region 之类的只是一种解决方法

这是因为 BEGIN 和 END 之间的任何内容都将作为 Batch 执行,并且批处理的所有规则都将适用于它。

想想当其中一个语句发生错误时会发生什么,您是否希望其他语句继续?

在这里查看更多:批次

于 2016-05-04T06:04:49.990 回答
1

如果需要在 T-SQL 脚本中创建多个批处理,则需要将命令组与GO语句显式分开。因此,即使您没有将 BEGIN...END 块(批处理)显式添加到代码中,也会隐式创建它。因此,明确添加它不会给您带来任何额外的麻烦。

如链接的 MSDN 文章中所述,某些命令不能在一批中组合在一起:

CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE TRIGGER 和 CREATE VIEW 语句不能与批处理中的其他语句组合。CREATE 语句必须开始批处理。该批次后面的所有其他语句将被解释为第一个 CREATE 语句定义的一部分。

不能更改表,然后在同一批次中引用新列。

如果 EXECUTE 语句是批处理中的第一个语句,则不需要 EXECUTE 关键字。如果 EXECUTE 语句不是批处理中的第一个语句,则需要 EXECUTE 关键字。

于 2016-05-04T06:17:09.203 回答
0

您可以使用注释来区分不同的批次,如下所示。

BEGIN /** Region1 Starts**/
....
....
....
END /** Region1 ends**/

BEGIN /** Region2 Starts **/
....
....
....
END /** Region2 Ends **/
于 2016-05-04T06:09:27.703 回答