«СОЗДАЙТЕ ПРОЦЕДУРУ ИМЯ КАК» против «СОЗДАЙТЕ ИМЯ ПРОЦЕДУРА КАК НАЧАТЬ / КОНЕЦ» - PullRequest
5 голосов
/ 16 ноября 2010

При создании хранимой процедуры служит ли блок BEGIN / END и назначение?

Например,

CREATE PROCEDURE SPNAME
AS
  SELECT * FROM TABLE

против

CREATE PROCEDURE SPNAME
AS
BEGIN
  SELECT * FROM TABLE
END

Ответы [ 5 ]

2 голосов
/ 16 ноября 2010

Как указано в документации CREATE PROCEDURE , BEGIN / END является необязательным:

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

Один или несколько Transact-SQL заявления, составляющие тело процедура. Вы можете использовать дополнительный Начать и END ключевые слова, чтобы включить заявления. Для получения информации см. Лучшие практики, общие замечания и Разделы Ограничения и Ограничения что следует.

В порядке личных предпочтений я всегда включаю их.

2 голосов
/ 16 ноября 2010

Для меня это просто ненужный дополнительный уровень отступа. Однако, если вы сделаете его BEGIN TRY - END TRY с BEGIN CATCH - END CATCH, тогда это добавит реальную цель.

1 голос
/ 16 ноября 2010

Последний - просто хороший стиль программирования и соответствует общим стандартам. Насколько я знаю, они ничем не отличаются.

Лично я считаю, что имеет смысл и улучшает читабельность, чтобы иметь BEGIN и END вокруг каждого логического фрагмента кода (даже в случае хранимых процедур).

0 голосов
/ 16 ноября 2010

BEGIN и END не имеют отношения к хранимой процедуре, однако они являются необходимыми для функции.

Хорошо:

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

Не хорошо:

CREATE FUNCTION dbo.fun(@v varchar(10))
RETURNS INT
AS
RETURN 1
0 голосов
/ 16 ноября 2010

Реального размаха в корпусе нет. Но ваш код будет читабелен и чист, если вы используете блоки BEGIN / END.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...