【发布时间】:2014-12-02 23:08:30
【问题描述】:
所以下面是我的问题的一个示例,其中没有任何数据。我遇到了一个问题,我创建了一个带有 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 的查询设计器中运行存储过程时,它也很好。
那么为什么即使我将参数设置为数据集属性中的值,我的报告也会将 NULL 作为参数传递给存储过程?
【问题讨论】:
-
你提到
it seems to be passing nothing,你确认了吗?使用SQL Server Profiler确定这是正确的。 -
感谢@t_m 的回复。是的,我们已经运行了探查器,似乎在参数中传递了一个 NULL,即使我们在数据集属性中设置了它。
标签: sql tsql stored-procedures reporting-services ssrs-2008