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属性中的值?
当您处于数据集属性中时,它不会传递任何值,但会从存储过程中检索元数据。
您需要更改存储过程以返回相同的列。
变更表定义,以便#数据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
从另一个数据库根据参数。
感谢您回复@t_m。这实际上并不是我理解它的工作原理。在数据集属性中使用参数有什么意义?我需要返回text1,text2在我的数据集和text3,text4在另一个,因为他们是完全不同的列返回完全不同的领域。在你的答案中,我将不得不改变单个列标题的所有内容,以使其中的IIF根据传递的参数更改列名称。似乎有点奇怪。 – 2014-10-09 07:45:44
我相信你误解了SSRS和数据集的工作方式。在设计上,报告获取设计报告所需的列元数据。没有初始引用列元数据的情况下,不能使用列。没有办法获取所有列元数据来设计您当前的逻辑报告。所以你要么在你的逻辑中使用'Text1,Text2'或'Text3,Text4'。 – Tak 2014-10-09 13:00:12
是的,但我不想要所有的列。假设我只是想要带有text1和text2列的数据集,你是说我无法在数据集属性中将@ReportType的参数传递为“Y”?因为如果我这样做了,它只会返回上面逻辑中当前具有text3和text4的数据集。这就是我目前的问题所在。 – 2014-10-09 13:48:48
你提到'它似乎没有通过',你确认了吗?使用'SQL Server Profiler'确定这是正确的。 – Tak 2014-10-08 12:55:21
感谢回复@t_m。是的,我们已经运行了分析器,并且似乎即使我们在“数据集属性”中设置了它,参数中仍然会传递NULL。 – 2014-10-08 14:23:30