Требуются ли ключевые слова BEGIN/END в хранимой процедуре?

Возможный дубликат:
Когда мне нужно использовать блоки Begin/End и ключевое слово Go в SQL Server?

Пример:

CREATE PROCEDURE DoSomething
AS
BEGIN
    SET NOCOUNT ON;

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

Вам нужны НАЧАЛО и КОНЕЦ? Какая разница, есть они у вас или нет?


person RJ.    schedule 02.10.2012    source источник
comment
правда пробовал? есть ли разница, которую вы нашли?   -  person nawfal    schedule 03.10.2012
comment
если у меня есть несколько операторов внутри BEGIN .... что, если для ОДНОГО из них произойдет исключение, и я получу ошибку. Будет ли он продолжать выполнение других строк кода или выйдет из BEGIN?   -  person RJ.    schedule 03.10.2012
comment
Нет, остальная часть пакета считается сохраненным определением процедуры (даже после END, если присутствует BEGIN ... END). Так что довольно легко непреднамеренно оставить там рекурсивный вызов EXEC!   -  person Martin Smith    schedule 03.10.2012
comment
В операторах IF и циклах BEGIN ... END является хорошей практикой. В хранимых процедурах это следует считать плохой практикой; это дает ложное ощущение инкапсуляции. Это объясняется здесь.   -  person Ruud Helderman    schedule 16.06.2017


Ответы (2)


Они являются необязательными.

Из MSDN — СОЗДАТЬ ПРОЦЕДУРУ:

Из определения команды -

AS { [ НАЧАЛО ] sql_statement [;] [ ...n ] [ КОНЕЦ ] }

И далее на странице:

{ [ НАЧАЛО ] sql_statement [;] [ ...n ] [ КОНЕЦ ] }

Одна или несколько инструкций Transact-SQL, составляющих тело процедуры. Вы можете использовать необязательные ключевые слова BEGIN и END, чтобы заключить операторы.

person Oded    schedule 02.10.2012

Как указано в документации CREATE PROCEDURE, они необязательны.

{ [ НАЧАЛО ] sql_statement [;] [ ...n ] [ КОНЕЦ ] }

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

Лично я всегда включаю их, но это только я.

person Joe Stefanelli    schedule 02.10.2012