我有一个Test_Sp
以这种方式返回数据的存储过程:
Id Name Age Address State Country
1 ManiS 25 aaaa bbb ccc
Run Code Online (Sandbox Code Playgroud)
这个存储过程返回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;
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
消息50000,级别16,状态0,过程Test_Sp,行16
无法在INSERT-EXEC语句中使用ROLLBACK语句.
我知道Select * into
&如果我创建一个临时表与存储过程输出相同的列意味着它将工作..
我的问题:是否可以根据参数从存储过程输出中仅将两列插入临时表变量中?
Ana*_*dke 18
选项1:
创建一个包含sp返回的所有列的中间临时表,然后执行以下操作:
INSERT INTO Temp
Exec [Test_Sp] 23;
Run Code Online (Sandbox Code Playgroud)
然后
INSERT INTO @testTbl(Name,Age)
select name,age from temp
Run Code Online (Sandbox Code Playgroud)
选项2:
修改您的sproc并再添加一个数据类型参数@limitedcolumn如果@limitedcolumn = true,则返回仅需要的列,否则返回所有列
INSERT INTO @testTbl(Name,Age) EXEC [Test_Sp] 23,true;
Run Code Online (Sandbox Code Playgroud)