Sql server 为什么不应该';Transact-SQL语句是否在同一批中分组?

Sql server 为什么不应该';Transact-SQL语句是否在同一批中分组?,sql-server,tsql,technet,Sql Server,Tsql,Technet,TechNet的开始…结束描述让我对以下评论感到困惑: 尽管所有Transact-SQL语句在BEGIN…END块中都有效,但某些Transact-SQL语句不应在同一批(语句块)中分组在一起 有谁能告诉我为什么他们不应该在一个开始分组。。。终点站?当我使用BEGIN…END来创建区域时,有什么问题吗?BEGIN..END不是一个可视选项为了能够折叠一个区域,您实际上是在告诉服务器这些行是在一起的。将其用作#类区域只是一种解决方法 这是因为在开始和结束之间的任何内容都将作为批执行,并且批的所有

TechNet的开始…结束描述让我对以下评论感到困惑:

尽管所有Transact-SQL语句在BEGIN…END块中都有效,但某些Transact-SQL语句不应在同一批(语句块)中分组在一起


有谁能告诉我为什么他们不应该在一个开始分组。。。终点站?当我使用BEGIN…END来创建区域时,有什么问题吗?

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

这是因为在开始和结束之间的任何内容都将作为批执行,并且批的所有规则都将应用于它

想想当其中一条语句中出现错误时会发生什么,是否希望其他语句继续


查看此处的更多信息:

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

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

BEGIN /** Region2 Starts **/
....
....
....
END /** Region2 Ends **/

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

如中所述,某些命令不能在一个批中组合在一起

创建默认值、创建函数、创建过程、创建规则、创建 触发器和CREATE VIEW语句不能与其他语句组合 批处理中的语句。CREATE语句必须开始批处理。全部的 该批中后面的其他语句将被解释为 第一个CREATE语句的定义

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

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


你读过(例如)它链接到的文章吗:?我读过,但我不明白。您能解释更多细节吗?基本上,通过在开始/结束中分组,您可以选择批处理的方式,但您应该仅在有意的情况下这样做(错误处理、执行逻辑等),而不是无意的,因为“外观”可能会导致所解释的副作用。如果不使用GO分离命令,则不完全正确,无论何时开始,T-SQL的其余部分都不会执行。。。结束块。事务也会更改前面语句的行为,但这不是主题。同样基于文档:“一些运行时错误,例如违反约束,只停止当前语句。批处理中的所有剩余语句都将被执行。”