首页 文章

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

提问于
浏览
8

我有一个存储过程 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 回答

  • 17

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

相关问题