SSRS中如何实现单字段多关键词通配符搜索?
解决方案
这里提供两种可行的实现方式,分别对应分号分隔的单参数输入和多值参数手动输入的场景:
方法1:使用分号分隔的单文本参数
这种方式让用户在单个参数输入框中用分号分隔多个关键词(比如delayed;discharge),通过SQL的字符串拆分函数验证所有关键词是否同时存在于目标字段中。
修改后的SQL语句
WHERE -- 处理未输入关键词的情况,返回全部数据 (@Action IS NULL OR @Action = '') OR EXISTS ( SELECT 1 FROM STRING_SPLIT(@Action, ';') AS Keywords -- 过滤掉空的关键词(比如用户输入连续分号的情况) WHERE LTRIM(RTRIM(Keywords.Value)) <> '' AND FilteredActivityPointer.regardingobjectidname LIKE '%' + LTRIM(RTRIM(Keywords.Value)) + '%' -- 确保所有非空关键词都匹配成功 HAVING COUNT(DISTINCT LTRIM(RTRIM(Keywords.Value))) = ( SELECT COUNT(DISTINCT LTRIM(RTRIM(Value))) FROM STRING_SPLIT(@Action, ';') WHERE LTRIM(RTRIM(Value)) <> '' ) )
参数设置
- 在报表参数属性中,将
@Action的类型设为文本,无需勾选“允许多值”。 - 用户输入示例:
delayed;discharge
方法2:使用多值参数手动输入
虽然没有下拉列表,但SSRS的多值参数允许用户手动输入多个关键词(逐个添加或用逗号分隔输入),报表会自动将参数值转换为集合,再通过SQL验证全匹配。
修改后的SQL语句
WHERE (@Action IS NULL OR (SELECT COUNT(1) FROM @Action) = 0) OR EXISTS ( SELECT 1 FROM @Action AS Keywords WHERE LTRIM(RTRIM(Keywords.Value)) <> '' AND FilteredActivityPointer.regardingobjectidname LIKE '%' + LTRIM(RTRIM(Keywords.Value)) + '%' HAVING COUNT(DISTINCT LTRIM(RTRIM(Keywords.Value))) = ( SELECT COUNT(DISTINCT LTRIM(RTRIM(Value))) FROM @Action WHERE LTRIM(RTRIM(Value)) <> '' ) )
参数设置
- 在报表参数属性中,勾选“允许多值”,类型设为文本。
- 用户输入方式:
- 点击参数输入框旁的下拉按钮,逐个输入关键词并添加;
- 直接在输入框中用逗号分隔输入多个关键词(比如
delayed,discharge)。
注意事项
- 若使用SQL Server以外的数据库,
STRING_SPLIT可能无法使用,需替换为对应数据库的字符串拆分函数(比如MySQL的SUBSTRING_INDEX,Oracle的REGEXP_SUBSTR)。 - 两种方法都加入了空值和空关键词的处理,避免因无效输入导致查询出错。
内容的提问来源于stack exchange,提问作者Paula Morrison
相关产品推荐
相关产品推荐

