Tsql SSRS 2008:为什么声明的查询变量显示在;“定义查询参数”;窗户?

Tsql SSRS 2008:为什么声明的查询变量显示在;“定义查询参数”;窗户?,tsql,ssrs-2008,bids,Tsql,Ssrs 2008,Bids,在Reporting Services 2008中创建数据集时遇到问题。以下是我想要使用的查询(一般用于公共消费): 我只有一个输入参数:@PersonName。然而,Studio 2008似乎认为@PersonID在“定义查询参数”窗口中也需要一个值。因此,当我尝试只为@PersonName输入一个值时,它会给我“这个变量已经定义好了” 我正在传递@PersonName,因为我需要显示一个可读的人员列表,从下拉列表中选择这些人员作为报告中唯一面向用户的参数。我意识到我可以执行子查询并忘记上面示

在Reporting Services 2008中创建数据集时遇到问题。以下是我想要使用的查询(一般用于公共消费):

我只有一个输入参数:
@PersonName
。然而,Studio 2008似乎认为
@PersonID
在“定义查询参数”窗口中也需要一个值。因此,当我尝试只为
@PersonName
输入一个值时,它会给我“这个变量已经定义好了”


我正在传递
@PersonName
,因为我需要显示一个可读的人员列表,从下拉列表中选择这些人员作为报告中唯一面向用户的参数。我意识到我可以执行子查询并忘记上面示例中的变量,但我真正的查询要大得多/更难看,而且我无法准确地向数据表添加索引,因此我希望限制表扫描。

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

Declare @PersonName char(20) 

select (some columns)
from  [otherTable] 
join  [People]
  on  [otherTable].[personID] = [People].[personID]
where [People].[name] = @PersonName 
首先,一个查询为的新数据集

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

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

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

Declare @PersonName char(20) 

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

在您认为它会出现性能问题之前,请尝试一下

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

编辑:

这将消除你的问题