我有一个参数@Department
,并将其在数据集中的值设置为=Join(Parameters!Department.Value,",")
。我将其设置为接受多个值,在我的SQL中,我有以下子句:(RTRIM(G.DeptName) IN (@Department))
。
只要用户选择了一个部门,它就可以工作,但只要选择了多个部门,它就无法工作。它运行,但它不显示任何数据。例如,如果我选择“会计”,则会显示“会计”信息。但如果我选择“会计”和“营销”,则不会显示任何内容。
为什么这不起作用的任何想法?此外,是否可以使用“字符串”值以外的其他方式执行此操作?
答案 0 :(得分:3)
你做出了错误的假设。
IN ('1,2,3,4')
与IN (1,2,3,4)
或IN ('1', '2', '3', '4')
你目前正在做的第一个。您正在检查您的部门名称是否位于仅 一个 值的列表中; @department字符串。该值中包含逗号,但它仍然是一个字符串,因此它仍然是列表中的单个项目。
您有两种选择。
动态构建SQL,使列表成为sql的一部分,而不是字符串参数。
或者查找在线提供的众多SPLIT()
功能之一。这是我推荐的那个。然后你可以做类似的事情......
WHERE
RTRIM(G.DeptName) IN (SELECT * FROM dbo.split(@Department))
甚至更好,加入SPLIT()
函数的结果......
yourTable AS G
INNER JOIN
dbo.split(@department) AS department
ON RTRIM(G.DeptName) = department.item
答案 1 :(得分:0)
正如Dems所说,你需要一个连接函数。
中的那个休息一切都没问题
WHERE
RTRIM(G.DeptName) IN (SELECT * FROM dbo.split(@Department))
而不是(RTRIM(G.DeptName) IN (@Department))
应该有用。