c# - SQL Server Report Builder 3 使用带参数的 SQL IN 运算符不起作用

标签 c# sql asp.net reporting-services split

我正在尝试在单列上使用 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/

相关文章:

c# - 检查javascript是否被禁用?

javascript - 如何关闭弹出窗口并将 View 模型返回到先前的 View ?

c# - 尝试转换为泛型类型时出错 : redundant cast

c# - 如何通过省略字符串的某些部分来验证或比较字符串

sql - ORA-00907 缺少右括号问题 - 在插入查询中按顺序选择

c# - 更新大表(很多列)。 C# 网络

c# - 性能比较 TcpClient 与 HttpWebRequest

asp.net - 样式删除所有样式

c# - 惰性属性初始化在 C# 中不起作用

c# - 如何从 C# 执行 .sql?