2009-07-24 13 views
3

私はproc 1が格納されていると言います。そのストアドプロシージャを実行し、そのストアドプロシージャの結果に基づいて、別のストアドプロシージャ内のいくつかのパラメータを設定する方法を教えてください。例えばSQLサーバーのEXECステートメントの結果/結果セットにアクセスしようとしています

: 表:

UserInfo (UserID [int], Name [varchar], DateOfBirth [datetime]) 

PROC 1ストアド:

PROC 2ストアド
CREATE Procedure StoredProc1 
    @Name [varchar] 
AS 
    SELECT UserID, Name, DateOfBirth FROM UserInfo WHERE Name = @Name 

CREATE Procedure StoredProc2 
    @AmountOfNames [int] OUT 

SELECT @AmountOfNames=COUNT(EXEC StoredProc1 @Name='Irwin') 

私はどのようにそれが必要ストアドプロシージャ2ではないことを知っていますそれは私がやりたいことです。結果の最後のセットに基づいてカウントを設定してください。

私はあなたがSP1のリターンのスキーマを知っている場合は、あなたがこれを行うことができますストアドプロシージャ1

+1

私はあなたがストアドプロシージャ#1を変更できないと言っていたと思います。 –

+0

@@ ROWCOUNT?あなたが探しているものなのかどうかはわかりません。 – shahkalpesh

答えて

2

あなたはあなたの最初のストアドプロシージャの結果をキャッチすることができます一時テーブルまたはテーブル変数...

DECLARE @MyResults TABLE(UserID int, Name varchar(30), DateOfBirth datetime) 

INSERT @MyResults 
EXEC StoredProc1 'Scott' 

-- do what you want with the table here... 

か - あなたが最初のPROCからの結果の数をつかむために@@ ROWCOUNT変数を使用することができます。あなたはStoredProc1上のコントロールを持っていない場合、あなたができるので、一時テーブルは、あなたの最良の選択肢かもしれません

DECLARE @Count int 

EXEC StoredProc1 'Scott' 
SET @Count = @@ROWCOUNT 

-- do whatever you want with the count here... 

これはか...あなたの最初のストアドプロシージャ内のSELECT文の後に来るものに応じて動作しない場合がありますあなたのStoredProc1 procでselect文の後に@@ ROWCOUNTがコードによってリセットされた結果を保証しません。

+0

SQL SPバッチ内でINSERT EXECを複数回使用することはできません。 –

+0

私のインサートは失敗し続けましたが、@@ RowCountは助けてくれました。 – Irwin

+0

@Ganesh R、私は、これを使用するプロシージャを入れ子にしなければならないと思っていました。 –

2

を変更することはできません。

CREATE SP2 
AS 
BEGIN 

CREATE TABLE #Results1 (
    UserID VARCHAR(50), 
    Name  VARCHAR(100), 
    DateOfBirth DATETIME 
) 

INSERT INTO #Results1 
EXEC sp1 @Param1, @Param2 

SELECT COUNT(UserID) FROM #Results1 

END 
2

すでに回答がありますが(まだ受け入れています)、How to Share Data Between Stored Proceduresに興味があるかもしれません。プロシージャ間通信のさまざまな方法、その動作方法、およびそれぞれを使用する理由(または使用しない理由)に関する多くの情報

関連する問題