MSDN提供以下语法和解释:
{ [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
包含主体的一个或多个Transact-SQL语句 程序。您可以使用可选的BEGIN和END关键字进行封闭 声明。有关信息,请参阅最佳实践,常规 备注,以及后面的限制和限制部分。
本质上,这是一系列SQL语句,如果没有BEGIN / END对,则无人知道。 BEGIN / END块本质上是一个声明。程序体可以由两个连续的BEGIN / END块组成吗? (很可能没有,但我没有看到它写在任何地方。)当没有BEGIN / END对时,解析器可以决定该程序在任何顶级SQL语句上结束。渔获物在哪里?
备注和限制部分也不是很有帮助。
答案 0 :(得分:3)
是的,两个BEGIN
/ END
对可以组成一个存储过程的主体:
create procedure P
as
begin
select 1 as A
end
begin
select 2 as B
end
创建一个生成两个结果集的存储过程。
存储过程的实际结束是批次的结束。这是您发送到服务器的查询的整个主体,或者,如果您使用某些客户端工具(例如SSMS),它将根据GO
command自动将其提交分批:
将一批Transact-SQL语句的结尾发送到SQL Server实用程序。
所有内容基于批处理的线索实际上是第一句话是您已链接到的Limitations and Restrictions部分:
CREATE PROCEDURE语句不能与单个批处理中的其他Transact-SQL语句组合使用。
从逻辑上讲,这意味着CREATE PROCEDURE
语句会消耗批处理中的整个内容。