2012-11-02 34 views
3

我在建立用於在存儲過程中調用存儲過程的正確語法時遇到困難。我認爲這句法是正確的:使用另一個存儲過程中的參數調用存儲過程的正確語法

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [dbo].[newProc](
    @param1 varchar(50), 
    @param2 nvarchar(2000), 
    @param3 int, 
    @param4 int, 
    @param5 int, 
    @param6 int 
) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    EXEC [dbo].[externProc1] @param1, @param2; 
    GO 

    EXEC [dbo].[externProc2] @param3, @param4; 
    GO 

    EXEC [dbo].[insertProc3] @param5, @param6; 
    GO 

END 
GO 

但當我嘗試這個,我不斷收到 「附近有語法錯誤‘;’必須聲明標量變量@param3。 必須聲明標量變量@param5。「

使用另一個存儲過程中的參數調用存儲過程的正確語法是什麼?

回答

2

T-SQL中的GO關鍵字指出一個t-sql語句塊結束並執行該塊。這意味着一個塊中定義的變量不再是「在範圍之內」,該塊在GO結束/執行之後發生。

GO實際上不是一個Transact SQL語句:

http://msdn.microsoft.com/en-us/library/ms188037(v=sql.105).aspx

用戶必須遵循批次的規則。例如,任何執行 存儲過程之後的批處理中的第一條語句都必須包含 的EXECUTE關鍵字。本地(用戶定義的)變量的範圍是 ,限於批處理,,並且在執行GO命令後無法引用。

+0

啊,是的,我修好了。一旦時間限制到期,會給你支票。如果最後只有一個GO,那麼前面的語句是否仍然同步執行? I.E.是否有理由不在最後使用單個GO? – Christian

+0

我很確定最後的單個GO是不需要的,尤其是從管理工作室內部執行時。 – davek

+0

GO不是T-SQL語句時期,它只是MS Analyzer/Management Studio工具的助手,因此您不能在存儲過程中使用它 – BlackTigerX

相關問題