"CREATE PROCEDURE SPNAME AS"和"CREATE PROCEDURE SPNAME AS BEGIN/END"的区别是什么?

5

创建存储过程时,BEGIN/END块有什么作用吗?

例如:

CREATE PROCEDURE SPNAME
AS
  SELECT * FROM TABLE

对比。

CREATE PROCEDURE SPNAME
AS
BEGIN
  SELECT * FROM TABLE
END
5个回答

2
CREATE PROCEDURE文档所示,BEGIN/END是可选的:
{ [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
由一个或多个Transact-SQL语句组成的过程体。您可以使用可选的BEGIN和END关键字来包含这些语句。有关详细信息,请参阅以下最佳实践、一般备注和限制和约束部分。
出于个人偏好,我总是包括它们。

2

对我来说,它只是不必要的额外缩进级别。但是,如果你将其变成一个 BEGIN TRY - END TRY 带有一个 BEGIN CATCH - END CATCH ,那么它就有了真正的用途。


1

后者只是一种良好的编程风格,遵循通用标准。据我所知,它们在任何方面都没有区别。

我个人认为,在每个逻辑代码块周围(即使在存储过程的情况下)放置BEGINEND是有意义的,并且可以提高可读性。


每个逻辑代码块周围都有一个BEGIN和END,天哪!我认为这样做会更妨碍而不是帮助。 - KM.
好的,我理解你的观点了。我试图指出最佳实践。我不会在一行代码或琐碎的地方使用它。 - Vishal

0

在此情况下没有实际目的。但是如果您使用BEGIN/END块,则您的代码将更易读和清晰。


我看过很多使用BEGIN/END块的代码,但并不容易阅读。可读性良好的代码不仅仅是到处使用BEGIN/END块这么简单。 - KM.

0

BEGIN 和 END 对于存储过程没有影响,但对于函数是必需的。

好的:

CREATE PROC dbo.sproc(@v varchar(10))
AS
RETURN -1

不好:

CREATE FUNCTION dbo.fun(@v varchar(10))
RETURNS INT
AS
RETURN 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接