【问题标题】:Are BEGIN / END keywords required in a stored procedure? [duplicate]存储过程中是否需要 BEGIN / END 关键字? [复制]
【发布时间】:2012-10-02 20:34:22
【问题描述】:

可能重复:
When do I need to use Begin / End Blocks and the Go keyword in SQL Server?

例子:

CREATE PROCEDURE DoSomething
AS
BEGIN
    SET NOCOUNT ON;

    -- Insert lots of statements in here, including other stored procedures.
END

您需要 BEGIN 和 END 吗?有没有会有影响吗?

【问题讨论】:

  • 真的试过了吗?你发现有什么不同吗?
  • 如果我在“BEGIN”中有多个语句......如果其中一个发生“异常”并且我收到错误怎么办。它会继续执行其他代码行还是退出“BEGIN”?
  • 不,它将批处理的其余部分计为存储的过程定义(即使在 END 之后,如果存在 BEGIN ... END)。所以很容易在不经意间留下一个递归的EXEC调用!
  • IF 语句和循环中,BEGIN ... END 是很好的做法。在存储过程中,它应该被认为是不好的做法;它给人一种错误的封装感。这是解释here

标签: sql tsql syntax


【解决方案1】:

它们是可选的

来自 MSDN - CREATE PROCEDURE:

从命令的定义——

AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }

然后在页面后面:

{ [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }

构成过程主体的一个或多个 Transact-SQL 语句。您可以使用可选的 BEGIN 和 END 关键字将语句括起来。

【讨论】:

    【解决方案2】:

    the CREATE PROCEDURE documentation 中所示,它们是可选的。

    { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }

    一个或多个 包含过程主体的 Transact-SQL 语句。你可以 使用 可选 [强调添加] BEGIN 和 END 关键字将语句括起来。为了 信息,请参阅最佳实践、一般说明和限制 和随后的限制部分。

    就个人而言,我总是将它们包括在内,但这只是我自己。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 2015-06-12
      • 2011-01-25
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      相关资源
      最近更新 更多