首页 > 解决方案 > 插入 - 执行问题。存储过程的空输出

问题描述

我需要SELECT存储过程输出中的特定数据,因此我试图将存储过程的输出插入表中。我是 SQL 的新手。

所以这里是代码:

Declare @result table
(
    row_id int,
    quarry nvarchar(400),
    interval nvarchar(100),
    vskr_plan decimal(30,1),
    vskr_fact decimal(30,1),
    vskr_diff decimal(30,1),
    ruda_plan decimal(30,1),
    ruda_fact decimal(30,1),
    ruda_diff decimal(30,1),
    gpr_plan decimal(30,1),
    gpr_fact decimal(30,1),
    gpr_diff decimal(30,1),
    gm_plan decimal(30,1),
    gm_fact decimal(30,1),
    gm_diff decimal(30,1)
)

INSERT INTO @result
    EXEC [report].[DISP_KPI_QUARRY] @datet = N'2018-10-11'

SELECT * 
FROM @result

我对这段代码没有错误,但它返回一个空表!

但是,如果我执行:

EXEC [report].[DISP_KPI_QUARRY] @datet = N'2018-10-11'

我看到了所有的数据。

伙计们,我的错误是什么?

标签: sql-serverstored-proceduresinsertexec

解决方案


您可以尝试以INSERT与从存储过程返回的顺序相同的顺序将列包含在语句中。当您从存储过程插入结果时,您需要确保该存储过程返回的列的计数、数据类型和顺序与您的@result表定义相匹配。

DECLARE @result table
(
    row_id int,
    quarry nvarchar(400),
    interval nvarchar(100),
    vskr_plan decimal(30,1),
    vskr_fact decimal(30,1),
    vskr_diff decimal(30,1),
    ruda_plan decimal(30,1),
    ruda_fact decimal(30,1),
    ruda_diff decimal(30,1),
    gpr_plan decimal(30,1),
    gpr_fact decimal(30,1),
    gpr_diff decimal(30,1),
    gm_plan decimal(30,1),
    gm_fact decimal(30,1),
    gm_diff decimal(30,1)
)

INSERT INTO @result (row_id, quarry, interval, vskr_plan, vskr_fact, vskr_diff, ruda_plan, ruda_fact, ruda_diff, gpr_plan, gpr_fact, gpr_diff, gm_plan, gm_fact, gm_diff)
EXEC [report].[DISP_KPI_QUARRY] @datet = N'2018-10-11'

SELECT *
FROM @result

推荐阅读