2011-02-02 13 views
5

別のストアドプロシージャで1つのストアドプロシージャの結果を使用することはできますか?ストアドプロシージャの結果をストアドプロシージャSql Server 2008を呼び出すのに使用

I.e.

CREATE PROCEDURE [dbo].[Proc1] 
     @ID INT, 
     @mfgID INT, 
     @DealerID INT 

AS 
BEGIN 

    DECLARE @Proc1Result UserDefinedTableVariable 

    EXEC @Proc1Result = Proc2 
     @SomeID = @ID, 
     @SomeID2 = @mfgID, 
     @SomeID3 = @DealerID 

    -- Now I want to use the table returned by the stored procedure here. 
    SELECT [col1],[col2] FROM @Proc1Result 

END 

私はINSERT INTO @Proc1Result EXEC Proc2 (with parameters passed)を使用してみましたが、INSERT EXECは、ネストされた声明の中で呼び出すことはできません。

これを達成する方法はありますか?環境はSQL Server 2008です。

答えて

9

ストアドプロシージャをネストできますup to 32 levels

INSERT-EXECに関しては、this article以上の読取りをお勧めします。ここでsnippitです:

some_spは、INSERT-EXECでsome_other_sp を呼び出そうとした場合、あなたは エラーメッセージが表示されます。このため、一度に1つのINSERT-EXECをアクティブにすることができます( )。この はSQL Serverの制限事項です。

5

あなたが正しくて、INSERT ... EXECはネストできません。 〜からHow to Share Data Between Stored Procedures

ネストできません。 some_spが になると、some_other_spとINSERT-EXECを呼び出すと、 というエラーメッセージが表示されます。したがって、 は一度に1つのINSERT-EXEC しかアクティブにすることができません。これはSQL Serverの の制限です。

他の方法を見つける必要があります。 Erlandの記事はあなたが持っているすべての選択肢をほぼ完全に把握し、詳細に議論しています。

+0

私はあなたと2分前に全く同じリンクとクォートを投稿しましたが、より多くの票を得ましたか?テディベアでなければなりません... –

+1

@Abe:私は手続き名をフォーマットしました。何時間も何時間も働いていて、有権者は余計な努力を感謝します;) –

+1

Remusもソースから大きな部分を引用しています。トピックでより多くの文脈を持つOP。 :) –

1

から別のSPに結果を得るための一つの構文は次のとおりです。

INSERT INTO [myTable] 
EXEC Proc1 [param1], [param2], [param3], etc. 

しかし、あなたはそれがに挿入し、フィールド名とタイプが完全に一致していることを最初のテーブルを作成する必要があります。

+0

他の2つの回答をお読みください – RichardTheKiwi

+0

他の2つの回答は一貫していません。 (あなたは途中でそれらを入れ子にすることができます)私は実際にOPのどこに彼が複数回入れ子になっているかは分かりませんが、正しく理解していないかもしれません。 –

関連する問題