SSRS数据集参数不起作用

时间:2014-10-08 10:12:41

标签: sql tsql stored-procedures reporting-services ssrs-2008

以下是我的问题的一个示例,没有任何数据。我遇到了一个问题,我已经创建了一个带有IF的存储过程,以便参数指示我在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”传递给存储过程,它似乎没有传递任何东西,因为我将存储过程的ELSE部分作为我的数据集中的可用字段返回。当我尝试使用@ReportType“N”和@Debug“N”时,我得到了我需要的可用字段但我假设这是因为它将NULL传递给@ReportType。

我有什么遗失的吗?

当我使用与上面相同的参数运行proc SSMS时,我得到了我需要的数据集。当我在SSRS中的Query Designer中运行存储过程时,它也没关系。

那么,为什么我的报告会将NULL作为参数传递给存储过程,即使我将参数设置为数据集属性中的值?

1 个答案:

答案 0 :(得分: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,并根据参数从另一个数据库返回text3, text4