我在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
,因为我需要显示一个人类可读的人员列表,以便从下拉菜单中选择作为报告的唯一面向用户的参数。我意识到我可以做一个子查询并忘记上面例子中的变量,但是我的真实查询要大得多/更加丑陋,我无法将索引添加到数据表中,所以我想限制表扫描。
答案 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)
为什么不将查询转换为存储过程?根据我的经验,存储过程提供了更好的性能(注意参数嗅探)以及可重用性。
编辑:
它会消除你的问题。