2014-10-08 88 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 

所以,當我進入數據集>添加數據集,我選擇「存儲過程」的「查詢類型」,選擇上面的存儲過程。然後我去參數和@ReportType我輸入「Y」和@Debug我輸入「N」。我點擊刷新字段,然後確定。但不是將「Y」傳遞到存儲的proc中,它似乎沒有傳遞任何東西,因爲我將存儲的proc的ELSE部分作爲可用字段返回到數據集中。當我嘗試使用@ReportType「N」和@Debug「N」時,我得到了我需要的可用字段,但是我假設這是因爲它將NULL傳遞給了@ReportType。

有什麼我失蹤?

當我使用與上面相同的參數運行proc SSMS時,我得到了我需要的數據集。當我在SSRS中的查詢設計器中運行存儲過程時,它也很好。

那麼,爲什麼我的報告將一個NULL作爲參數傳遞給存儲過程,即使我將參數設置爲Dataset屬性中的值?

+0

你提到'它似乎沒有通過',你確認了嗎?使用'SQL Server Profiler'確定這是正確的。 – Tak 2014-10-08 12:55:21

+0

感謝回覆@t_m。是的,我們已經運行了分析器,並且似乎即使我們在「數據集屬性」中設置了它,參數中仍然會傳遞NULL。 – 2014-10-08 14:23:30

回答

0

當您處於數據集屬性中時,它不會傳遞任何值,但會從存儲過程中檢索元數據。

您需要更改存儲過程以返回相同的列。

變更表定義,以便#數據2具有相同的列名#數據1 ..

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數據集和text3, text4從另一個數據庫根據參數。

+0

感謝您回覆@t_m。這實際上並不是我理解它的工作原理。在數據集屬性中使用參數有什麼意義?我需要返回text1,text2在我的數據集和text3,text4在另一個,因爲他們是完全不同的列返回完全不同的領域。在你的答案中,我將不得不改變單個列標題的所有內容,以使其中的IIF根據傳遞的參數更改列名稱。似乎有點奇怪。 – 2014-10-09 07:45:44

+0

我相信你誤解了SSRS和數據集的工作方式。在設計上,報告獲取設計報告所需的列元數據。沒有初始引用列元數據的情況下,不能使用列。沒有辦法獲取所有列元數據來設計您當前的邏輯報告。所以你要麼在你的邏輯中使用'Text1,Text2'或'Text3,Text4'。 – Tak 2014-10-09 13:00:12

+0

是的,但我不想要所有的列。假設我只是想要帶有text1和text2列的數據集,你是說我無法在數據集屬性中將@ReportType的參數傳遞爲「Y」?因爲如果我這樣做了,它只會返回上面邏輯中當前具有text3和text4的數據集。這就是我目前的問題所在。 – 2014-10-09 13:48:48