为什么不应将 Transact-SQL 语句组合在同一批中?



开始。。。TechNet的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#区域?

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

某些命令不能按MSDN链接文章中的规定分组在一个批中

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

不能更改表,然后在同一批次。

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

开始。。END不是一个视觉选项为了能够折叠一个区域,您实际上是在告诉服务器这些行在一起。将其用作#区域,就像是一个解决方案

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

想想当其中一个语句发生错误时会发生什么,你想让其他语句继续吗?

点击此处查看更多:批次

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

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

最新更新