“CREATE PROCEDURE SPNAME AS”与“CREATE PROCEDURE SPNAME as BEGIN / END”

时间:2010-11-16 16:43:32

标签: tsql

创建存储过程时,BEGIN / END块是否起作用?

例如

CREATE PROCEDURE SPNAME
AS
  SELECT * FROM TABLE

VS

CREATE PROCEDURE SPNAME
AS
BEGIN
  SELECT * FROM TABLE
END

5 个答案:

答案 0 :(得分:2)

CREATE PROCEDURE documentation所示,BEGIN / END是可选的:

  

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

     

一个或多个Transact-SQL   包含该机构的声明   程序。您可以使用可选项   包含BEGIN和END关键字   声明。有关信息,请参阅   最佳实践,一般性评论和   限制和限制部分   接下来。

作为个人喜好,我总是包括它们。

答案 1 :(得分:2)

对我来说,这只是一个不必要的额外缩进级别。但是,如果您使用BEGIN TRY - END TRY进行BEGIN CATCH - END CATCH,那么它会增加一个真正的用途。

答案 2 :(得分:1)

后者只是一种很好的编程风格,遵循一般标准。据我所知,它们没有任何区别。

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

答案 3 :(得分:0)

案件中没有真正的目的。但是如果你使用BEGIN / END块,你的代码将是可读和干净的。

答案 4 :(得分: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