【问题标题】:Unable to load stored procedure result set into temporary table in SQL Server无法将存储过程结果集加载到 SQL Server 中的临时表中
【发布时间】:2017-05-18 13:30:15
【问题描述】:

我正在尝试将存储过程结果集加载到临时表中,但数据未加载到临时表中。存储过程结果不存储到临时表中。它显示“0 行受影响”。

示例 #1:

EXEC dbo.emp

(10 row(s) affected)

示例#@:

insert into #tempemp
    EXEC dbo.emp

(0 row(s) affected)

10 行未加载到临时表中。

我试过这样:

insert into #tempemp
   EXEC sp_executesql @tsql = N'EXEC(''EXEC dbo.emp '') 
         with RESULT SETS
(
    (
             EMPID varchar(100)
            ,EMPName VARCHAR(100)
            ,EMPCode VARCHAR(7)
            ,EMPNumber VARCHAR(20)
            ,[STATE] VARCHAR(50)
            ,City VARCHAR(50)
            ,Zip VARCHAR(20)
            ,CustomerTypeName VARCHAR(100)
            ,StatusCD VARCHAR(50)
            ,FilterCode VARCHAR(100) 
    )
 )'

但我只得到一个错误:

消息 11536,第 16 级,状态 1,第 1 行
EXECUTE 语句失败,因为它指定了 WITH RESULT SETS 子句 1 个结果集,但语句在运行时只发送了 0 个结果集 时间。

但存储过程只返回一个结果集。

有人可以帮忙吗?

谢谢。

【问题讨论】:

  • 我假设您在运行语句之前创建了临时表?您没有包含该代码。
  • 您会找到解决方法here。它不是那样工作的,你不能立即将存储过程的结果插入到表中。
  • 您的存储过程不返回任何结果集。因此,您尝试做的事情是不可能的。要使这条路径成功,您必须更改存储过程的逻辑。

标签: sql sql-server stored-procedures sql-server-2012


【解决方案1】:

如果要进行测试,它应该在同一个对象上。我们都没有你的 SP,但我知道我有这个,而且它对我来说很好用:

CREATE PROCEDURE DUCKLING AS BEGIN SELECT 1 END

CREATE TABLE #TEMP (ID INT)

INSERT INTO #TEMP EXEC DUCKLING

SELECT * FROM #TEMP

所以也许您可以尝试一下,和/或向我们提供您的 SP 代码。替代 SP(如 DUCKLING)是否可以帮助我们缩小问题发生的范围。

【讨论】:

  • 一般情况下你的场景会起作用。我在其他存储过程中使用相同的场景。但是存储过程的问题是我在 sp dbo.emp 中使用了许多临时表和存储过程,因为这个原因数据没有加载进入临时表。我认为临时表的元数据问题。所以我将临时表更改为表变量仍然没有加载数据。感谢您的回复。
【解决方案2】:

由于我是菜鸟,我还不能简单地发表评论。

在我看来,您似乎期待 exec dbo.emp 的输出。我看到了 (10) 行,但我希望得到与您在 select 语句中一样的结果。

您可能只需要在 dbo.emp 的末尾添加一个 select 语句来转储所有内容,然后您的 Insert 就可以按预期工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-30
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2021-01-10
    • 1970-01-01
    • 2018-07-13
    相关资源
    最近更新 更多