SQL 服务器在 Report Builder 中选择多个 LIKE 值

SQL Server Selecting multiple LIKE values in Report Builder

我有一份报告,我试图允许用户从下拉列表中 select 多个预先确定的 LIKE 值,以获取他们在报告生成器中的结果。有什么办法可以做到这一点?我曾尝试使用 LIKE IN() 但这两个关键字似乎不能一起使用。这是我的代码。我的代码只有在我 select 一个选项时才有效。

DECLARE @Warehouse nvarchar(10)
DECLARE @Location nvarchar(10)
SET @Warehouse = 'Warehouse1'
SET @Location = 'IB'

SELECT Part
, Tag
, CurrentLocation AS 'Location'
, TotalQty
, DateTimeCreated 
, datediff(hour, DateTimeCreated, getdate()) AS 'Hours in Location'
, User AS 'Last User'
FROM table1
WHERE datediff(hour, DateTimeCreated, getdate())>=1
AND Warehouse IN(@Warehouse)
AND(CurrentLocation LIKE '%' + @Location + '%')
ORDER BY 'Hours in Location' DESC, CurrentLocation

这最好用存储过程来处理。这是它如何工作的高级描述。通过一些精明的谷歌搜索,可以在低层次上学习每一种技术:

对于您的报表数据集,调用存储过程,将您的多值参数传递给存储过程中的 varchar 参数。对于这个答案的其余部分,我们将调用该参数 @MVList

在存储过程中,@MVList 将作为用户在参数列表中选择的所有选项的逗号分隔字符串接收。

从 Table1 编写您的 SELECT 查询,连接到 Table 值函数,该函数拆分 @MVList(google SQL 拆分函数以获得预先编写的代码),并生成一个 table,其中一行对应用户选择的每个值。

对于 JOIN 条件,而不是等于,做一个 LIKE:

INNER JOIN MySplitFunction(@MVList, ',') AS SplitFunction
ON Table1.CurrentLocation LIKE '%'+SplitFunction.value+'%'

查询结果将是您要查找的IN/LIKE结果。

感谢您的回复。这就是我最终解决问题的方法。

SELECT Part
, Tag
, CurrentLocation AS 'Location'
, TotalQty
, DateTimeCreated 
, datediff(hour, DateTimeCreated, getdate()) AS 'Hours in Location'
, User AS 'Last User'
FROM table 1
WHERE datediff(hour, DateTimeCreated, getdate())>=1
AND Warehouse in (@Warehouse)
AND LEFT(CurrentLocation,2) IN(@Location)
ORDER BY 'Hours in Location' DESC, CurrentLocation