【问题标题】:Report Builder parameter LIKE multiple values报表生成器参数 LIKE 多个值
【发布时间】:2019-03-08 15:23:03
【问题描述】:

我的数据集查询使用 LIKE 语句选择值:

WHERE unitcode LIKE 'A2%'

所以这会返回 A200、A201、A202 等。

我的报告用一个参数替换了这个:

WHERE unitcode LIKE @code

@code 可以是“A2%”或“B2%”,可通过下拉列表选择,以显示包含 A2 代码或 B2 代码的报告。

现在我想添加第三个选项,它同时选择 A2 和 B2 代码。这可能吗? LIKE 的工作方式似乎阻止我将多个 LIKE 绑定在一个参数中,并且我尝试使用 @code 执行 WHERE @code unitcode LIKE 'A2%' OR unitcode LIKE 'B2%' 但这会导致错误。

【问题讨论】:

  • 错误是什么?我看不出unitcode LIKE 'A2%' OR unitcode LIKE 'B2%'有什么问题
  • “在预期条件的上下文中指定的非布尔类型的表达式。”我猜你不能只把整个语句放在参数中。

标签: sql-server reportbuilder3.0


【解决方案1】:

您或许可以在此处使用 SQL Server 的增强版LIKE

SELECT *
FROM yourTable
WHERE unitcode LIKE '[AB]2%';

这可能会解决您的问题的查询方面,但您仍然需要一种方法来收集参数,以便可以编写上述内容。

【讨论】:

  • 这在查询中有效。但是,报表生成器参数不喜欢方括号(因为它们通常用于描述表达式)。你知道如何逃脱它们吗?
【解决方案2】:

我在这里在内存上运行,因为我现在无法访问 SSRS 或报告生成器,但是,如果我没记错的话,如果您使用存储过程,两者都将一组值作为分隔字符串传递。因此这是伪 SQL,但因此您可以使用字符串拆分器执行类似的操作(假设 SQL Server 2016+ 没有标记版本):

CREATE PROC YourProc @code varchar(100) AS
BEGIN
    SELECT {Your SELECT statement}
    FROM {Your FROM and JOINs}
    WHERE EXISTS (SELECT 1
                  FROM STRING_SPLIT(@code,',') SS
                  WHERE {YT}.unitcode LIKE SS.[value]) --assumes that the report passed values with a % at the end
      AND {Rest of WHERE};                             --Otherwise use LIKE SS.[value] + '%'
END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多