9

Test_Spこの方法でデータを返すストアド プロシージャがあります。

 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;

しかし、私はこのエラーが発生します:

メッセージ 50000、レベル 16、状態 0、プロシージャ Test_Sp、行 16
INSERT-EXEC ステートメント内で ROLLBACK ステートメントを使用することはできません。

Select * intoストアドプロシージャの出力と同じ列を持つ一時テーブルを作成すると、それが機能することを認識しています..

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

4

1 に答える 1

19

オプション1:

sp が返すすべての列を含む中間一時テーブルを作成し、次のようにします。

INSERT INTO Temp
Exec [Test_Sp] 23;

それで

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

オプション 2:

sproc を変更し、もう 1 つのビット データ型パラメーター @limitedcolumn を追加します @limitedcolumn=true の場合、必要な列のみを返します。そうでない場合はすべての列を返します

INSERT INTO @testTbl(Name,Age) EXEC [Test_Sp] 23,true;
于 2012-09-27T13:24:24.553 に答える