SSRS - вернуть несколько запросов в одной хранимой процедуре - PullRequest
6 голосов
/ 15 марта 2012

Я пытаюсь создать новый отчет 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 ]

5 голосов
/ 15 марта 2012

К сожалению, это невозможно.

Согласно книге Прикладные службы отчетов Microsoft SQL Server 2008
От Section 4.3.5 - Working with Stored Procedures:

Если хранимая процедура возвращает несколько наборов строк (выполняет несколько операторов SELECT), отчет обрабатывает только первый набор строк.Если вам нужны все результаты, рассмотрите возможность реализации хранимой процедуры-оболочки, которая объединяет несколько наборов строк во временной таблице и возвращает все строки с одним оператором SELECT.

Как предложено, вам придется сделатькакая-то корректировка вашей хранимой процедуры для достижения этой цели.Либо создайте оболочку для возврата всех результатов в одном наборе, либо разбейте существующую хранимую процедуру на три.

Примечание : В данный момент вы можете получить pdf книги здесь , но она может быть удалена.

1 голос
/ 20 марта 2012

Просто добавьте еще один параметр: ResultSetN и выведите соответствующий набор результатов, в зависимости от этого параметра.1 вернет заказы 2 вернет результаты 3 вернет статус Вы можете затем вызвать хранимую процедуру 3 раза с соответствующим #.

EXEC pClientData @clientID, 1

EXEC pClientData @clientID, 2

EXEC pClientData @clientID, 3

...