我有一个产品表。该表中的每一行对应一个产品,并由唯一的 ID 标识。现在每个产品都可以有多个与该产品关联的“代码”。例如:
Id | Code ---------------------- 0001 | IN,ON,ME,OH 0002 | ON,VI,AC,ZO 0003 | QA,PS,OO,ME
我想做的是创建一个存储过程,这样我就可以传入一个代码,如“ON,ME”,并让它返回包含“ON”或“ME”代码的每个产品。由于代码以逗号分隔,我不知道如何拆分和搜索它们。这可能仅使用 TSQL 吗?
编辑:这是一个关键任务表。我无权更改它。
最佳答案
您应该将代码存储在单独的表中,因为您拥有多对多关系。如果将它们分开,那么您将能够轻松地进行检查。
可以在您现在拥有的系统类型中执行此操作,但需要对列进行文本搜索,每行进行多次搜索才能工作,随着数据的增长,这将产生巨大的性能问题。
如果您尝试沿着当前路径走下去: 您将不得不拆分输入字符串,因为无法保证每条记录上的代码与输入参数的顺序相同(或连续)。那么你将不得不做一个
Code LIKE '%IN%'
AND Code Like '%QA%'
用附加语句查询您要检查的每个代码。非常低效。
下面的UDF思路也是一个不错的idea。但是,根据数据的大小以及查询和更新的频率,您也可能会遇到问题。
是否可以创建一个额外的标准化表,并按计划(或基于触发器)同步以供您查询?
关于sql - 数据库字段中的逗号分隔值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/738133/