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&如果我创建一个与存储过程输出具有相同列的临时表意味着它将起作用..

我的问题:是否可以根据参数从存储过程输出中仅将两列插入临时表变量?

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 并添加一个位数据类型参数 @limitedcolumn 如果 @limitedcolumn=true 则仅返回必需的列,否则返回所有列

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