我想从表的完整列表中检索某些记录。这里我使用逗号分隔的值和in子句。表行如下所示:
这是我的sql查询,但查询完成时结果集为空`
DECLARE @input VARCHAR(1000) = '2,3,17,10,16'
SELECT * FROM locations
WHERE
east_zone in (SELECT VALUE FROM string_split(@input,','))
OR
west_zone in (SELECT VALUE FROM string_split(@input,','))
谢谢你的帮助!
2条答案
按热度按时间3zwtqj6y1#
虽然这是可以完成的,但我要求您重新考虑您的数据模型。在数据库中存储以逗号分隔的id/引用列表是个坏主意。我非常赞同蒂姆·比盖莱森的评论
另一种方法是将区域标题列表存储在一个单独的表中。
这里有一个方法来实现这一点
D小提琴连杆https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=1cc9b224e443369744df19c1d7a7d789
pvabu6sv2#
蒂姆110%正确。您的数据模型完全是一团糟——不仅仅是在一个分隔字符串中存储多个值。但也把数字串成字符串。错,错,错。
但是,如果你被其他一些非常,非常,非常糟糕的设计选择所困扰,你确实有一个选择:
我不推荐这种方法。我只是建议您在修复数据模型之前将其作为权宜之计。