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つの列を挿入することが可能ですパラメータに基づいてストアドプロシージャの出力から変数?
6列をすべて挿入して無視するのはなぜですか?または、新しいストアドプロシージャを記述しますか?場合によっては2つの列しか必要ないことがわかっているようにストアドプロシージャを変更しますか? –
こんにちは@AaronBertrand ...別のシナリオでこのsp(Test_Sp)を使用しましたので、私はこのspに新しい列を追加しますので、このtempテーブルの変数の挿入には影響しません(このtemp変数の挿入は異なるspで使用されるため) ... –
異なる目的を果たすために異なるストアドプロシージャが必要なようです。ストアドプロシージャがそうするように書かれていない限り、「ちょっと、今度は2つの列を返すよ」と言う方法はありません。 [OPENROWSETのトリック](http://stackoverflow.com/questions/653714/how-to-select-into-temp-table-from-stored-procedure)がありますが、おそらくあなたは[これを読んでください](http ://www.sommarskog.se/share_data.html)。 –