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?
答案 0 :(得分:1)
BEGIN..END 不是可视选项,您实际上是在告诉服务器这些线路在一起。将它用作#region就像解决方法。
这是因为BEGIN和END之间的任何内容将作为批处理执行,并且批处理的所有规则都将适用于它。
想想当其中一个语句发生错误时会发生什么,你想让其他语句继续吗?
点击此处查看更多信息:Batches
答案 1 :(得分:1)
如果需要在T-SQL脚本中创建多个批处理,则需要使用GO
语句显式分隔命令组。所以BEGIN ... END块(批处理)是隐式创建的,即使你没有明确地将它添加到你的代码中。所以明确地添加它不会给你带来任何额外的麻烦。
某些命令无法按照linked MSDN article:
中的规定在一个批次中组合在一起创建默认,创建功能,创建程序,创建规则,创建 TRIGGER和CREATE VIEW语句不能与其他语句结合使用 批量陈述。 CREATE语句必须开始批处理。所有 该批次中的其他声明将被解释为部分 第一个CREATE语句的定义。
无法更改表,然后在中引用新列 同一批。
如果EXECUTE语句是批处理中的第一个语句,则执行EXECUTE 关键字不是必需的。如果是,则需要EXECUTE关键字 EXECUTE语句不是批处理中的第一个语句。
答案 2 :(得分:0)
您可以使用注释来区分不同的批次,如下所示。
BEGIN /** Region1 Starts**/
....
....
....
END /** Region1 ends**/
BEGIN /** Region2 Starts **/
....
....
....
END /** Region2 Ends **/