2014-10-08 4 views
0

Ниже приведен пример моей проблемы без каких-либо данных. У меня проблема, когда я создал хранимую процедуру с IF, чтобы параметр определял, какой набор данных я создаю в SSRS, однако, когда я передаю параметр в SSRS, я не получаю набор данных, который я запрашиваю. Мой пример скрипта выглядит следующим образом:Параметры набора данных SSRS не работают

USE [InfoPortal] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 


CREATE PROCEDURE [dbo].[usp_Report_SSRSTest] 
    ( 
     @ReportType   VARCHAR(255) = NULL 
    , @Debug    VARCHAR(1) = NULL 
) 
AS 

BEGIN 

SET NOCOUNT ON 
SET FMTONLY OFF 


CREATE TABLE #data1 
(
number  INT 
,text1  VARCHAR(100) 
,text2  VARCHAR(300) 
) 

CREATE TABLE #data2 
(
number  INT 
,text3  VARCHAR(100) 
,text4  VARCHAR(300) 
) 



IF @ReportType = 'Y' 
    BEGIN 

     SELECT 
       number 
      , text1 
      , text2 

     FROM #data1 

    END 
ELSE 

    BEGIN 

     SELECT 
       number 
      , text3 
      , text4 

     FROM #data2 

    END 

END 

Так что, когда я иду в Datasets> Добавить Dataset, я выбираю «тип запроса» из «хранимой процедуры» и выберите сохраненный процедурный выше. Затем я перехожу к параметрам, а в @ReportType вводя «Y» и @Debug, я вводил «N». Я нажимаю обновить поля, а затем ОК. Но вместо того, чтобы передавать «Y» в хранимый процесс, кажется, что ничего не пропускает, потому что я получаю часть ELSE хранимой процедуры, возвращаемую как доступные поля в моем наборе данных. Когда я пытаюсь использовать @ReportType «N» и @Debug «N», я получаю доступные мне поля, но Im полагаю, что это связано с тем, что он передает NULL в @ReportType.

Есть что-то, что мне не хватает?

Когда я запускаю SSMS proc с теми же параметрами, что и выше, я получаю требуемые данные. Когда я запускаю хранимый proc в Query Designer в SSRS, это также прекрасно.

Итак, почему мой отчет передавал NULL в качестве параметра хранимой процедуры, даже если я устанавливаю параметр в значение в свойствах Dataset?

+0

Вы упоминаете, что «кажется, что ничего не пропускаете», подтвердили ли вы? Используйте 'SQL Server Profiler', чтобы определить, что это правильно. – Tak

+0

спасибо за ответ @t_m. Да, мы запустили профайлер, и кажется, что в параметре передается NULL, даже если мы установили его в свойствах набора данных. –

ответ

0

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

Вам необходимо изменить хранимую процедуру, чтобы возвращать одинаковые столбцы.

Изменить определение таблицы так # Data2 имеют те же имена столбцов, как # Data1 ..

CREATE TABLE #data1 
(
number  INT 
,text1  VARCHAR(100) 
,text2  VARCHAR(300) 
) 

CREATE TABLE #data2 
(
number  INT 
,text3  VARCHAR(100) 
,text4  VARCHAR(300) 
) 

-- Modified to add data 
INSERT INTO #data1 (number, text1, text2) 
SELECT 1, 'text1', 'text2' 

INSERT INTO #data2 (number, text3, text4) 
SELECT 2, 'text3', 'text4' 


IF @ReportType = 'Y' 
BEGIN 

    SELECT 
      number 
     , text1 
     , text2 
    FROM #data1 
END 
ELSE 
BEGIN 
    SELECT 
      number 
     , text3 AS text1 -- **MODIFIED** 
     , text4 AS text2 -- **MODIFIED** 
    FROM #data2 

END 

END 

Если это не то, что вы хотите, то вы должны дать дополнительную информацию, почему вы хотели бы вернуть text1, text2 от одного dataset и text3, text4 из другой базы данных на основе параметра.

+0

Благодарим вас за ответ @t_m. На самом деле это не так, как я это понял. В чем смысл наличия параметров в свойствах набора данных? Мне нужно будет возвращать text1, text2 в моем наборе данных и text3, text4 в другом, потому что они полностью разные столбцы, возвращающие совершенно разные поля. В вашем ответе мне пришлось бы изменить все заголовки с одним столбцом, чтобы иметь внутри него IIF, чтобы изменить имя столбца в зависимости от переданного параметра. Кажется немного странным. –

+0

Я считаю, что вы неправильно поняли, как работают службы SSRS и наборы данных. При разработке отчета получают метаданные столбца, необходимые для разработки отчета. Вы не можете использовать столбцы без первоначальной ссылки на метаданные столбца. Невозможно получить все метаданные столбца для разработки вашего отчета в вашей текущей логике. Таким образом, вы либо можете использовать «Text1, Text2» или «Text3, Text4» в своей логике. – Tak

+0

Да, но я бы не хотел, чтобы все столбцы. Скажем, мне просто нужен набор данных с столбцами text1 и text2, вы говорите, что я не могу передать параметр для @ReportType как «Y» в свойствах Dataset? Потому что, если бы я это сделал, это только вернет набор данных, который в настоящее время имеет text3 и text4 в логике выше. Вот где моя текущая проблема. –

Смежные вопросы