2012-10-02 75 views
4

可能重複:
When do I need to use Begin/End Blocks and the Go keyword in SQL Server?在存儲過程中是否需要BEGIN/END關鍵字?

例子:

CREATE PROCEDURE DoSomething 
AS 
BEGIN 
    SET NOCOUNT ON; 

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

你需要BEGIN和END?如果你有或沒有,它會有什麼不同嗎?

+1

試過了嗎?你找到什麼不同? – nawfal

+0

如果我在「BEGIN」中有多個語句....如果其中一個發生「異常」,我會得到一個錯誤。它會繼續執行其他代碼行還是會退出「BEGIN?」 – Testifier

+1

否,它會將該批處理的其餘部分作爲存儲的proc定義進行計數(即使在存在'BEGIN ... END'時也是'END'後面)。所以很容易在那裏不經意地留下一個遞歸的'EXEC'調用! –

回答

8

它們是可選

從MSDN - CREATE PROCEDURE

從命令的定義 -

AS {[BEGIN] sql_statement [;] [... N] [END]}

稍後在頁面中:

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

一個或多個Transact-SQL語句,構成過程的主體。您可以使用可選的BEGIN和END關鍵字來包含這些語句。

6

the CREATE PROCEDURE documentation所示,它們是可選的。

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

一個或多個 Transact-SQL語句包含過程的主體。您可以使用 使用可選 [加入] BEGIN和END關鍵字來包含這些語句。有關 的信息,請參閱最佳做法,一般說明和限制 和以下限制條款。

就個人而言,我總是包括他們,但那只是我。