SSRS数据集参数不起作用

问题描述:

所以下面是我的问题没有任何数据的例子。我有一个问题,我已经创建了一个带有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

当您处于数据集属性中时,它不会传递任何值,但会从存储过程中检索元数据。

您需要更改存储过程以返回相同的列。

变更表定义,以便#数据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