Sql SSRS 2008中的多值参数不起作用
我有一个参数@Department,并将其在数据集中的值设置为=JoinParameters!部门价值,,。我将其设置为接受多个值,并且在我的SQL中有以下子句:@Department中的RTRIMG.DeptName 每当用户选择一个部门时,它就工作,但当选择多个部门时,它根本不工作。它运行,但不显示任何数据。例如,如果我选择“会计”,它会显示“会计”信息。但如果我选择“会计”和“营销”,什么都不会显示Sql SSRS 2008中的多值参数不起作用,sql,sql-server-2005,ssrs-2008,Sql,Sql Server 2005,Ssrs 2008,我有一个参数@Department,并将其在数据集中的值设置为=JoinParameters!部门价值,,。我将其设置为接受多个值,并且在我的SQL中有以下子句:@Department中的RTRIMG.DeptName 每当用户选择一个部门时,它就工作,但当选择多个部门时,它根本不工作。它运行,但不显示任何数据。例如,如果我选择“会计”,它会显示“会计”信息。但如果我选择“会计”和“营销”,什么都不会显示 你知道为什么这样不行吗?此外,是否可以用字符串值以外的其他值以这种方式执行此操作?您做出了
你知道为什么这样不行吗?此外,是否可以用字符串值以外的其他值以这种方式执行此操作?您做出了错误的假设 “1,2,3,4”与“1,2,3,4”或“1”、“2”、“3”、“4”中的非常不同 你现在做的是第一件事。您正在检查您的部门名称是否位于只有一个值的列表中;@department字符串。该值中有逗号,但它仍然是单个字符串,因此它仍然是列表中的单个项 你有两个选择 动态构建SQL,使列表成为SQL的一部分,而不是字符串参数 或者在线查找许多拆分函数中的一个。这是我推荐的。然后你可以做一些像
WHERE
RTRIM(G.DeptName) IN (SELECT * FROM dbo.split(@Department))
或者更好的是,加入分割函数的结果
yourTable AS G
INNER JOIN
dbo.split(@department) AS department
ON RTRIM(G.DeptName) = department.item
正如Dems所说,您需要一个连接函数 你可以用这里的 休息吧,你的问题没问题
WHERE
RTRIM(G.DeptName) IN (SELECT * FROM dbo.split(@Department))
而不是@Department中的RTRIMG.DeptName
应该有效。您可以发布您的查询吗。为什么要在数据集中使用联接?SSRS中的多值参数应该可以正常工作:需要特别注意的是:如果您在G.DeptName上有一个索引,那么将其包装在诸如RTRIM之类的函数中将意味着您无法使用该索引来查找相关记录。相反,您将得到一个扫描,使得索引几乎毫无意义。如果可能,存储预修剪的值,这样您就不需要在查询中使用RTRIM,这意味着您可以使用索引并缩短代码: