SQL Server:根据参数将存储过程结果插入表中

时间:2012-09-27 12:32:18

标签: sql-server-2008

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

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

1 个答案:

答案 0 :(得分:18)

选项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;