首页 文章

SSRS - 在一个存储过程中返回多个查询

提问于
浏览
6

我正在尝试创建一个新的SSRS报告,该报告将返回并显示SQL Server存储过程的值 . 我将参数 @clientID 传递给存储过程 . 此参数用于3个不同的 BEGIN / END 语句中 . 每个 BEGIN END语句接受参数并进行查询,返回特定数据 .

当我创建SSRS报告时,我将数据源指向此存储过程,但仅返回第一个 BEGIN / END 语句中的结果集 . 如果我在SSMS中运行存储过程,我会得到3个不同的结果集,如预期的那样 .

如何将这些3 BEGIN / END 结果集合并到一个报告中?

示例代码:

CREATE PROCEDURE pClientData (@clientID varchar(30))
AS

    DECLARE @Orders table (
            ...
            ); 

    DECLARE @Results table (
            ...
            );

    DECLARE @Status table (
            ...     
            );

    BEGIN
        SET NOCOUNT ON;

        -- Get all the orders by client
        INSERT INTO @Orders
        SELECT ...


        -- Return the results --
        SELECT *
        FROM @Orders;

    END

    BEGIN
        SET NOCOUNT ON;

        -- Determine the Results

        INSERT INTO @Results
        SELECT ...

        SELECT * 
        FROM @Results;

    END

    BEGIN
        SET NOCOUNT ON;

        SET @Status = (
        SELECT ...
        );

        SELECT @Status as Status;

    END
    GO

来自SSRS的查询呼叫:

EXEC pClientData @clientID

2 回答

  • 1

    不幸的是,这是不可能的 .

    根据书Applied Microsoft SQL Server 2008 Reporting Services
    来自 Section 4.3.5 - Working with Stored Procedures

    如果存储过程返回多个行集(执行多个SELECT语句),则报表仅处理第一个行集 . 如果需要所有结果,请考虑实现一个包装器存储过程,该过程合并临时表中的多个行集,并使用一个SELECT语句返回所有行 .

    如建议的那样,您必须对存储过程进行某种调整才能完成此操作 . 创建一个包装器以在单个集合中返回所有结果,或者将现有存储过程拆分为三个 .

    注意:目前,你可以在这里获得电子书的pdf,但它可能会被删除 .

  • 5

    只需添加一个参数:ResultSetN并输出相应的结果集,具体取决于该参数 . 1将返回订单2将返回结果3将返回状态然后您可以使用相应的#调用您的存储过程3次 .

    EXEC pClientData @clientID,1

    EXEC pClientData @clientID,2

    EXEC pClientData @clientID,3

相关问题