在数据集中使用带分隔字符串的多值参数

using multi-value parameter with delimited string in dataset

我有一个 table,其中包含一个带分隔字符串的字段,这实际上是一个未排序的 id

列表
id| name | valueslist
----------------------------------------------
1 | John | 46423423,36456325,76473234,98798796
2 | Mike | 36456325,98798796
3 | Sara | 46423423

我有一个基于列出所有可能 ID 的数据集的多值参数

    param: @chosenvalues
    possible values: 
    46423423
    36456325
    76473234
    98798796

现在,当在参数中选择一个或多个 id 时,我想 return 我的 table 中具有该值的所有记录出现在它们的值列表中。

例如:

If I select 36456325 I need John & Mike to be returned
If I select 46423423 I need John & Sara to be returned
If I select 46423423 & 98798796 I need all three to be returned 

我以为我可以解决这个问题

SELECT * FROM table WHERE '%' + valueslist + '%' IN ('%' + @chosenvalues + '%') 

但这不起作用。关于如何解决这个问题有什么建议吗?

TIA,

亨罗

编辑:我知道这实际上远非理想的建模,但不幸的是,这是我必须使用的。

突然间我被闪电击中了,这个想法在我眼花缭乱的灵光中闪现。 (好吧,反正就是那种感觉)

我加入了 table with john's and janes 加入了 table 的所有可能的解决方案。然后我使用真正的标准 where 子句

做了一个 select distinct
SELECT DISTINCT j.*
FROM tableJohn j
LEFT JOIN Table_Solutions s on '%'+ s.value + '%' LIKE j.valuelist 
WHERE s.value in (@chosen_values)

@chosen_values 现在可以很好地填充 SSRS 报告中多值参数的值。

请尝试以下SQL Select语句

/*
create table valueslisttbl (id smallint, name varchar(20), valueslist varchar(1000))
insert into valueslisttbl values 
(1, 'John', '46423423,36456325,76473234,98798796'),
(2, 'Mike', '36456325,98798796'),
(3, 'Sara', '46423423')
*/

declare @chosenvalues varchar(100)
--set @chosenvalues = '46423423'
--set @chosenvalues = '36456325'
--set @chosenvalues = '76473234'
set @chosenvalues = '46423423,98798796'

select distinct name
from valueslisttbl
cross apply dbo.Split(valueslisttbl.valueslist, ',') s
where s.val in (
    select val from dbo.Split(@chosenvalues, ',')
)

另请注意,您需要 SQL Split function 才能解决您的需求

我使用 SQL XML 用于上述 SQL 服务器拆分功能,您可以在 http://www.kodyaz.com/articles/t-sql-convert-split-delimeted-string-as-rows-using-xml.aspx[=13= 找到 SQL 源代码]

希望对你有所帮助,