【问题标题】:Nested Stored Procedure嵌套存储过程
【发布时间】:2020-12-11 20:45:09
【问题描述】:

如何将嵌套存储过程的值插入表中。 例如,如果我创建了这样的存储过程。

    Create procedure New
    begin
        create table #tmp
        (
            id int,
            name varchar(50)
        );

        insert into #tmp
            exec stored_procedure 1,2;

        insert into #tmp
            exec stored_procedure 1,2;
        select * from #tmp
    end

现在如果我执行这个命令,SQL Server 会显示错误:

insert into #table
    exec New;

有人有解决这个问题的方法吗?请分享

【问题讨论】:

  • 如果您搜索该错误(您没有包含该错误),您会发现许多关于该错误和可能的解决方案的讨论。 Erland 对“分享”有广泛的讨论,一般here

标签: sql sql-server database stored-procedures


【解决方案1】:

现在你没有从你的过程New返回任何数据。如果您希望它返回数据以供调用代码插入,则需要在其中添加 select 语句。

例如在末尾添加一行:

SELECT * FROM #tmp;

此外,您不能嵌套 INSERT EXEC 语句。详情请见this answer

【讨论】:

  • 我也添加了该语句,但是 sql server 给出了这个错误,INSERT EXEC 语句不能嵌套
  • 啊,你是对的,你不能嵌套INSERT EXEC。见stackoverflow.com/a/3795413/8479
【解决方案2】:

您不能对存储过程返回的 de 值执行插入操作。

在您的情况下,最简单的方法是通过表函数更改 de 存储过程。 You can find more about table functions here

如果可以的话,我的意见是让它变得简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2016-04-17
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多