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

Posted

技术标签:

【中文标题】将存储过程结果插入临时表【英文标题】:Insert stored procedure results into temp table 【发布时间】:2020-01-26 05:00:20 【问题描述】:

我有一个返回这个结果的存储过程:

我调用存储过程的方式是:

Exec uspGetStandardUsingRoleandPhase '1908003'

我想将这些结果存储到一个临时表中,所以我像这样使用insert into

IF OBJECT_ID(N'tempdb.dbo.#tmp', N'U') IS NOT NULL
    DROP TABLE #tmp

CREATE TABLE #tmp
(
    startDate DATE,
    endDate DATE,
    strPhase NVARCHAR(50),
    strBadgeNumber NVARCHAR(30)
)

INSERT INTO #tmp (startDate, endDate, strPhase, strBadgeNumber)
    EXEC uspGetStandardUsingRoleandPhase '1908003'

但我收到这样的错误:

INSERT EXEC 失败,因为存储过程更改了目标表的架构。

【问题讨论】:

嗯,你有错误:) 现在你只需要找到在你的 SP 中修改模式的东西。没有 SP 代码,我们无能为力。 【参考方案1】:

很难说没有看到存储过程的代码,但我猜该过程还会创建一个名为#tmp 的临时表。尝试创建一个具有不同名称的临时表并在其中运行 INSERT EXEC,或者将代码发布到过程中以便我们可以看到它。

【讨论】:

这是一个绝妙的评论。我正在使用其他人的具有相同名称的临时表的过程 解决了我的问题!我使用相同的临时表名称#Product 谢谢!【参考方案2】:

值得注意的是,如果您使用的是查询存储,SQL 2016 中也会出现这种情况,并且它恰好在过程执行期间运行清理。他们建议增加查询存储大小以降低可能性,但除此之外,他们不打算为 SQL 2016 修复它(它已在 2017 年修复)

https://support.microsoft.com/en-us/help/4465511/error-556-insert-exec-failed-stored-procedure-altered-table-schema

【讨论】:

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

如何使用存储过程将数据存储在临时表上?

MySQL存储过程循环遍历变量并插入临时表

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

创建临时表并使用存储过程将数据加载到其中

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

Oracle存储过程创建临时表,插入数据后,怎么返回临时表数据,并在asp.net中接收到datatable中