Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql SSRS 2008中的多值参数不起作用_Sql_Sql Server 2005_Ssrs 2008 - Fatal编程技术网

Sql SSRS 2008中的多值参数不起作用

Sql SSRS 2008中的多值参数不起作用,sql,sql-server-2005,ssrs-2008,Sql,Sql Server 2005,Ssrs 2008,我有一个参数@Department,并将其在数据集中的值设置为=JoinParameters!部门价值,,。我将其设置为接受多个值,并且在我的SQL中有以下子句:@Department中的RTRIMG.DeptName 每当用户选择一个部门时,它就工作,但当选择多个部门时,它根本不工作。它运行,但不显示任何数据。例如,如果我选择“会计”,它会显示“会计”信息。但如果我选择“会计”和“营销”,什么都不会显示 你知道为什么这样不行吗?此外,是否可以用字符串值以外的其他值以这种方式执行此操作?您做出了

我有一个参数@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,这意味着您可以使用索引并缩短代码: