0

我在 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,是因为我需要显示一个人类可读的人员列表,以便从下拉列表中选择,作为报告的唯一面向用户的参数。我意识到我可以做一个子查询并忘记上面示例中的变量,但是我的实际查询更大/更丑,而且我不能准确地向数据表添加索引,所以我想限制表扫描。

4

3 回答 3

2

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

首先,一个带有查询的新数据集

SELECT PersonID, PersonName FROM People

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

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

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

于 2012-10-05T19:41:59.583 回答
0
Declare @PersonName char(20) 

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

在您认为它会出现性能问题之前先试一试。

于 2012-10-05T23:44:01.853 回答
0

为什么不把查询变成一个存储过程呢?根据我的经验,存储过程提供了更好的性能(但要注意参数嗅探)以及可重用性。

编辑:

它会明确消除您的问题。

于 2012-10-13T21:54:47.577 回答