2012-09-27 13 views
7

I持って、このようにデータを返すストアドプロシージャTest_Sp:私は挿入したいSQL Serverの:パラメータに基づいて、テーブルに挿入するストアドプロシージャの結果

Id Name  Age Address State Country 
1 ManiS 25  aaaa  bbb  ccc 
このストアドプロシージャは、データの6列を返して

が、一時テーブルにのみ最初の2列...

マイ一時テーブル変数は次のとおりです。

Declare @testTbl Table (RowId int identity, Name nvarchar(100), Age int); 
INSERT INTO @testTbl(Name,Age) EXEC [Test_Sp] 23; 
Select * from @testTbl; 

しかし、私はこのエラーを取得する:

Msg 50000, Level 16, State 0, Procedure Test_Sp, Line 16
Cannot use the ROLLBACK statement within an INSERT-EXEC statement.

私は、ストアドプロシージャの出力と同じ列を持つ一時テーブルを作成する場合& Select * intoについては、それが動作することを意味承知しています。..

私の質問:それは一時テーブルにちょうど2つの列を挿入することが可能ですパラメータに基づいてストアドプロシージャの出力から変数?

+2

6列をすべて挿入して無視するのはなぜですか?または、新しいストアドプロシージャを記述しますか?場合によっては2つの列しか必要ないことがわかっているようにストアドプロシージャを変更しますか? –

+0

こんにちは@AaronBertrand ...別のシナリオでこのsp(Test_Sp)を使用しましたので、私はこのspに新しい列を追加しますので、このtempテーブルの変数の挿入には影響しません(このtemp変数の挿入は異なるspで使用されるため) ... –

+0

異なる目的を果たすために異なるストアドプロシージャが必要なようです。ストアドプロシージャがそうするように書かれていない限り、「ちょっと、今度は2つの列を返すよ」と言う方法はありません。 [OPENROWSETのトリック](http://stackoverflow.com/questions/653714/how-to-select-into-temp-table-from-stored-procedure)がありますが、おそらくあなたは[これを読んでください](http ://www.sommarskog.se/share_data.html)。 –

答えて

17

オプション1:そして

INSERT INTO Temp 
Exec [Test_Sp] 23; 

INSERT INTO @testTbl(Name,Age) 
select name,age from temp 

オプション2:

これを戻りSPすべての列と中間の一時テーブルを作成し、実行しあなたのsprocを修正してもう1ビットのデータ型パラメータ@limitedcolumnを追加してください @ limitedcolumn = trueの場合、必要な列のみが返され、それ以外の場合はすべての列が返されます。

INSERT INTO @testTbl(Name,Age) EXEC [Test_Sp] 23,true; 
関連する問題