2012-03-11 6 views
0

これは基本的な質問ですが、これを行う正しい方法を理解できません。SQL Server - 変数をストアドプロシージャに渡すときに

SQL Server 2008ストアドプロシージャに変数を渡してクエリを返す必要があります。

CREATE PROCEDURE pOrders 
AS 
    DECLARE @enteredClientID varchar(20); 
    DECLARE @Results table (ClientID varchar(20), Num_orders int); 
BEGIN 
    SET NOCOUNT ON; 

    -- Get all the order from the client 
    INSERT INTO @Results 
     SELECT ClientID, sum(Num_orders) 
     FROM Orders O 
     WHERE O.ClientID = @enteredClientID 
     GROUP BY O.ClientID); 

    -- Insert the orders into the results table -- 
    SELECT * 
    FROM @Results; 

END 
GO; 

さて、私は、ストアドプロシージャを実行するだろうと戻って結果を得る:

exec pOrders 
set @enteredClientID = 'ABC123456789' 

を、私はこのエラーメッセージを取り戻す:ここ

は、ストアドプロシージャの

スカラー変数 "@enteredClientID"を宣言しなければなりません。

しかし、私は変数を宣言しています....私は何が欠けていますか?ストアドプロシージャを呼び出す手順

DECLARE @enteredClientID varchar(20) OUTPUT 

--Thenインサートと設定アイデンティティ

SELECT SCOPE_IDENTITY() AS @enteredClientID 

--When --in

答えて

2

あなたはパラメータを宣言しますが、ローカル変数ではありませんでした。それを呼び出すために

CREATE PROCEDURE pOrders (@enteredClientID varchar(20)) 
AS 
    DECLARE @Results table (ClientID varchar(20), Num_orders int); 

    SET NOCOUNT ON; 

    -- Get all the order from the client 
    INSERT INTO @Results 
    SELECT ClientID, sum(Num_orders) 
    FROM Orders O 
    WHERE O.ClientID = @enteredClientID 
    GROUP BY O.ClientID); 

    -- Insert the orders into the results table -- 
    SELECT * 
    FROM @Results; 

GO; 

アン:

exec pOrders @enteredClientID = 'ABC123456789' 

または単に

exec pOrders 'ABC123456789' 
1

: を - 戻り値に

DECLARE @enteredClientID VARCHAR(20); 
を保持する変数を宣言

- プロシージャを実行し、値を返します。

EXEC @enteredClientID = pOrders 
0

EXEC pOrders 'ABC123456789'を試してください。

あなたが指定した呼び出しは、(パラメータが渡されていない)プロシージャの実行を試み、次に@enteredClientIDという名前の変数を設定しようとします。 @enteredClientIDを実行コードのスコープに宣言していないので、それを設定することはできません。

手順でパラメータを使用する方法の詳細については、この記事は役に立つかもしれ: http://msdn.microsoft.com/en-us/library/ms189915.aspx

+0

だけの提案を:あなたが望んでいたとしてそれを宣言するには、それがテーブル値関数を使用しても意味がありこの必要性を満たす手続きの代わりに...それは質問の範囲外です:-) – Rose

関連する問題