SSRS 2008:为什么声明的查询变量显示在"定义查询参数"窗口?

时间:2012-10-05 18:10:30

标签: tsql ssrs-2008 bids

我在Reporting Services 2008中创建数据集时遇到了问题。以下是我要使用的查询(通用化以供公众使用):

Declare @PersonID as int
set @PersonID = (select top 1 personID from People where name = @PersonName)

select (some columns)
from [otherTable]
where personID = @PersonID

我只有一个输入参数:@PersonName。但是,Studio 2008似乎认为@PersonID 还需要“定义查询参数”窗口中的值。因此,当我尝试仅输入@PersonName的值时,它会给我“已定义此变量”。

我正在传递@PersonName,因为我需要显示一个人类可读的人员列表,以便从下拉菜单中选择作为报告的唯一面向用户的参数。我意识到我可以做一个子查询并忘记上面例子中的变量,但是我的真实查询要大得多/更加丑陋,我无法将索引添加到数据表中,所以我想限制表扫描。

3 个答案:

答案 0 :(得分:2)

您可以创建一个与参数一起使用的新数据集。

首先,查询

的新数据集
SELECT PersonID, PersonName FROM People

然后,在您的报表参数上(为了清楚起见,我将名称更改为 Person ),在“可用值”部分中,将其切换为“从查询中获取值”。选择新数据集,并将Value字段设置为PersonID,将Label字段设置为PersonName。

最后,将主数据集的@PersonID参数设置为报告参数[@Person]。

这样,您可以显示列表,但仍然可以使用ID。不需要PersonName报告参数。

答案 1 :(得分:0)

Declare @PersonName char(20) 

select (some columns)
from  [otherTable] 
join  [People]
  on  [otherTable].[personID] = [People].[personID]
where [People].[name] = @PersonName 

在您认为存在性能问题之前先试一试。

答案 2 :(得分:0)

为什么不将查询转换为存储过程?根据我的经验,存储过程提供了更好的性能(注意参数嗅探)以及可重用性。

编辑:

它会消除你的问题。