将存储过程和其他变量插入临时表

Posted

技术标签:

【中文标题】将存储过程和其他变量插入临时表【英文标题】:Insert Stored Procedure and other variables into a temp table 【发布时间】:2017-05-26 14:56:11 【问题描述】:

我有一个存储过程和 3 个变量。我需要将它们全部插入临时表的同一行。这可能吗?我试过了

INSERT INTO #Temp (@Ad, @B, @C, @SPInt) 
    SELECT 
        @Ad, @B, @C, EXEC sp_XYZ @A, @B, @C

但这不起作用。

【问题讨论】:

您的问题不清楚sp_XYZ 是否生成行并且您想要#temp 中的行,或者您只是想捕获返回值(这更简单:EXEC @SPInt = sp_XYZ @A, @B, @C 紧随其后由INSERT)。 【参考方案1】:

这种最简单的方法是修改存储过程以返回输入参数以及其他所有参数。

如果没有,您需要将输出结果存储在某处,然后插入到#Temp。这是一种方法:

create table #temp_exec (. . .);
insert into #temp_exec ( . . . )
    exec sp_xyz @A, @B, @C;

insert into #temp (a, b, c, . . . )
    select @A, @B, @C, . . .
    from #temp_exec;

如果#temp 一开始是空的,那么你不需要另一个表:

insert into #temp ( . . . )
    exec sp_xyz @A, @B, @C;

update #temp
    set a = @A, b = @b, c = @c;

【讨论】:

我怎么没想到。谢谢!【参考方案2】:

不,你不能在一个声明中做到这一切。

您可以在一个语句中执行 INSERT..EXEC,然后在 UPDATE 语句中添加变量。但是你必须使用两个不同的语句来做到这一点。

【讨论】:

好的,谢谢。这将是一个问题,因为 SP 返回一个 int。我想我只会更新 MAX(row_number),这将大大增加我的执行时间:(.

以上是关于将存储过程和其他变量插入临时表的主要内容,如果未能解决你的问题,请参考以下文章

将存储过程结果插入临时表

将数据从存储过程插入临时表

如何从存储过程返回的游标将数据插入临时表

将存储过程数据插入临时表不起作用

oracle 的存储过程中 动态的创建一张表 然后插入一个变量到这个表中,表能动态的创建但是变量不能插入进去

在存储过程中创建临时表