我有一个存储过程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
&如果我创建一个临时表与存储过程输出相同的列意味着它将工作..
我的问题:是否可以根据参数从存储过程输出中只插入两列临时表变量?
答案 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;