我正在尝试在单列上使用 IN 运算符来过滤 SSRS 中的数据集。当我添加多个值时,它会失败。
为了简单起见,这是我的 SQL 语句,排除了其他过滤器以专注于新问题。
从 vActivityDetailed WHERE Category IN (@Category) 中选择 *
@Category 受数据集属性下的覆盖表达式影响。
=Split(Parameters!Category.Value, ",")
我没有使用多值参数,而是将其视为单个值,并希望通过进行拆分,SSRS 应该像这样执行。
C# - ASP.NET 代码
string categoryString = "Expenses, Misc, Accounts-Receivable";
paramPayType.Name = "Category";
paramPayType.Values.Add((categoryString!= "" ? categoryString : null));
SSRS 最终 SQL 执行(预期)
SELECT * FROM vActivityDetailed WHERE Category IN ('Expenses', 'Misc', 'Accounts-Receivable')
由于我已经使用 SQL Server Management Studio 直接在 SQL 上对此进行了测试,因此我知道上述 SQL 应该可以工作,因为它返回记录,但是当在 SSRS 中应用时,它会失败,并显示报告处理期间发生错误。 (rsProcessingAborted)
最佳答案
当选择多个值时,SSRS中的参数值是一个字符串数组。 Split
函数采用单个字符串作为其参数。您不能将 Split
与数组一起使用。带有 SQL Server 的 SSRS 会为您处理值的分割,因此您应该能够直接传递参数。
如果您出于某种原因需要实际拆分值,我建议使用自定义 SQL 函数。如果你搜索的话,会有很多例子。
关于c# - SQL Server Report Builder 3 使用带参数的 SQL IN 运算符不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45806038/