创建存储过程时,BEGIN/END块是否提供服务和目的?“CREATE PROCEDURE SPNAME AS”vs.“CREATE PROCEDURE SPNAME AS BEGIN/END”
例如,
CREATE PROCEDURE SPNAME
AS
SELECT * FROM TABLE
与
CREATE PROCEDURE SPNAME
AS
BEGIN
SELECT * FROM TABLE
END
创建存储过程时,BEGIN/END块是否提供服务和目的?“CREATE PROCEDURE SPNAME AS”vs.“CREATE PROCEDURE SPNAME AS BEGIN/END”
例如,
CREATE PROCEDURE SPNAME
AS
SELECT * FROM TABLE
与
CREATE PROCEDURE SPNAME
AS
BEGIN
SELECT * FROM TABLE
END
如CREATE PROCEDURE documentation所示,BEGIN/END是可选的:
{[BEGIN] sql_statement [;] [... n]的 [END]}
的一个或多个的Transact -SQL 陈述包括 程序的正文。您可以使用可选的 BEGIN和END关键字来包含 语句。有关信息,请参阅后面的 最佳做法,一般说明和 限制和限制部分 。
作为个人的喜好,我总是包括他们。
后者是编程只是一个良好的作风并按照通用standards.They什么都没有什么不同,据我所知。
我个人认为这是有道理的,并且提高了可读性,以便在每个逻辑代码块(即使在存储过程的情况下)都有一个BEGIN
和END
。
对我来说,这只是一个不必要的额外缩进级别。但是,如果您将其设置为BEGIN TRY
- END TRY
并使用BEGIN CATCH
- END CATCH
,那么它会增加真正的目的。
在这种情况下没有真正的倾向。但是如果你使用BEGIN/END块,你的代码将是可读和干净的。
我见过很多BEGIN/END块代码非常可读。可读代码还有很多,比在每个地方使用BEGIN/END块都要多。 – 2010-11-16 16:58:00
BEGIN和END对存储过程没有影响,但它们是所需的函数。
好:
CREATE PROC dbo.sproc(@v varchar(10))
AS
RETURN -1
不行:
CREATE FUNCTION dbo.fun(@v varchar(10))
RETURNS INT
AS
RETURN 1
'一个BEGIN和END周围code'的每一个逻辑块,哎呀!我认为这样会更有帮助。 – 2010-11-16 17:01:03
嗯,我看到你的观点..我试图指出最佳做法..我不会为一个划线员或微不足道的地方... – Vishal 2010-11-16 17:03:44