Подтвердить что ты не робот

Множество наборов данных из хранимой процедуры в SSRS

У меня есть хранимая процедура, которая возвращает несколько наборов результатов так же, как показано ниже

Create StoredProcedure sp_MultipleDataSets
as
begin
SELECT EMPID, ENAME, JOB, SAL, DEPTID FROM EMP -- first result set
SELECT DEPTID, DNAME, LOC FROM DEPT --second result set
end

В BIDS при создании нового отчета я настроил хранимую процедуру для набора данных. Он создает набор данных ТОЛЬКО с столбцами, возвращаемыми из первого набора результатов. Он не идентифицирует второй набор результатов.

Как создать набор данных для обоих наборов результатов из хранимой процедуры, описанной выше

4b9b3361

Ответ 1

К сожалению, поскольку описание объясняется здесь:

Если несколько результирующих наборов извлекаются по одному запросу, обрабатывается только первый набор результатов, а все остальные результирующие элементы игнорируются.

(Найдено через этот вопрос.)

Поэтому я предлагаю использовать одну из двух возможностей:

(1) Разделите процедуру на две отдельные процедуры: одну, которая возвращает данные из EMP и одну из DEPT, и получите доступ к новым процедурам в виде двух отдельных наборов данных.

(2) Объедините два отдельных запроса (с дополнительным столбцом, чтобы указать, какой запрос создавал каждую строку) и фильтруйте или условно форматируйте отчет соответствующим образом. Объединенный запрос может выглядеть примерно так:

SELECT EMPID ID, ENAME NAME, JOB JOB_LOC, SAL, DEPTID, 'EMP' SOURCE 
FROM EMP
UNION ALL
SELECT DEPTID ID, DNAME NAME, LOC JOB_LOC, NULL SAL, DEPTID DEPTID, 'DEPT' SOURCE
FROM DEPT

Ответ 2

Попробуйте что-то вроде этого:

Create StoredProcedure sp_MultipleDataSets(@Param nvarchar(10))
as
begin
   if(@Param == "first")
      begin
         SELECT EMPID, ENAME, JOB, SAL, DEPTID FROM EMP -- first result set
      end
   if(@Param == "second")
      begin
        SELECT DEPTID, DNAME, LOC FROM DEPT --second result set
      end
end

Ответ 3

Я использую параметр в SP, чтобы вытягивать множество наборов результатов в SSRS все время. Вы должны разделить их с помощью инструкций IF в SP, а затем вы должны использовать HAND TYPE из FIELDS в настройке набора SSRS.

Кажется, что это удачный, но он работает...

Вот пример.

Сохраненная процедура (SP) имеет 2 параметра, определенные   @OfficerID   @DatasetFlag

@OfficerID - это Employee #, который должен быть passeed или INED IN IN (форма ввода данных SSRS) DatasetFlag - это способ, которым я управляю, какой оператор IF выполняется в SP.

, так что вот SP:

CREATE PROCEDURE [dbo].[StoredProcedureNameHere]
    @OfficerID  VARCHAR(7),
@DatasetFlag    VARCHAR(60)   

WITH RECOMPILE
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
SET NOCOUNT ON;

BEGIN TRY
IF @DatasetFlag = 'EmployeeName'
    Begin
        SELECT [EmployeeName]
        FROM [DatabaseName].[scema].[Employee]
        where EmployeeBNumber = @OfficerID
    END
ELSE
IF @DatasetFlag = 'Expect'
    Begin
        SELECT 
            [TerritoryName]
            ,[TestNumber]
            ,[RuleNumber]
            ,[Expectation]
            ,[TestCount]
            ,[PercentToGoal]
        FROM    [Database].[scema].[Table2]
        WHERE OfficerID = @OfficerID
        ORDER BY TerritoryID
                ,TestNumber
                ,RuleNumber
    END

RETURN
GO

В ОТЧЕТЕ есть 2 набора данных, один из которых я создаю, и он будет вызывать параметры и EmployeeName другой, который я создаю, и он тянет в EmployeeName, поскольку SSRS может использовать только 1 результат SET ~! НО... Я обманываю это....

но я просто делаю CREATE FIELDS, ПЕРЕДАЮ EMPLOYENAME, а затем ADD rest (Query) Поэтому отредактируйте FIELDS в свойствах DATASET и введите имена выбранных столбцов.

Затем в меню ПАРАМЕТРЫ (Свойства набора данных) добавьте EXPRESSION = "EmployeeName" для первого набора данных и = "Ожидать" для второго. Я также сопоставляю @OfficeID на этом экране.

тогда, когда я запускаю это... он запрашивает OfficerID (RS создает входную форму) и когда я ввел идентификатор и нажмите VIEW REPORT. Или мы можем все RDL с OfficerID, как и форма SSRS, но на странице ASPX.

Возвращаются данные BOTH DATASETS (он называет это дважды моим предположением)

Так что НИКАКИЕ БЫСТРОЕ ФИЛЬТРЫ на наборе данных UNION или других трюках, с которыми мне приходится иметь дело в SSRS, что не весело... (серьезно IIF?)

У меня есть одна хранимая процедура, где у нас есть 20 параметров, поэтому вы можете фильтровать OUTPUT отчета на уровне SQL, а не вытягивание и фильтрация монстра в отчете.

Нет, вы можете просто создать 20 хранимых процедур, хорошо, но таким образом, весь код находится в ОДНОМ месте, и, конечно, он может использовать selects в TEMP Tables, чтобы объединить тонны вещей, и в итоге просто ПОПУЛЯЕТ таблицу, которая является РЕЗУЛЬТАТОМ РЕЗУЛЬТАТОВ.

Как программист, я нахожу SSRS немного странным, но до сих пор мне весело, пытаясь найти способы получить то, что я хочу, а не то, что он предлагает...

Ответ 4

Для этой цели это трюк. Это следует за идеей "Объединить все" все результаты для одной таблицы и работает с репозицией ssrs с таблицей

Для каждого отдельного запроса добавьте один столбец, где показана цель запроса. Например, например, "имя" или "адрес", эта информация повторяется для каждой строки запроса.

Then Union Все нужные запросы.

В отчетах Visual studio/ssrs: добавьте набор данных, который содержит хранимую процедуру. Затем из инструментов выберите tablix и перетащите нужные данные в столбцы tablix. Затем перейдите в свойства строки tablix → Видимость строк. потому что предложение сортировки с функцией IFF показывает только строки с ранее определенным дополнительным столбцом в запросах, например, "Имя", Затем сделайте второй tablix и следуйте тому же, теперь используйте функцию IIF с "Address", затем продолжайте использовать различные таблицы.