sql - 数据库字段中的逗号分隔值

标签 sql database tsql stored-procedures

我有一个产品表。该表中的每一行对应一个产品,并由唯一的 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/

相关文章:

mysql - SQL - 对象是否具有所有必需的组件?

Android 日期查询无法正常工作

sql - 获取季度中的天数

sql - 如果只有子记录满足特定条件,则内部联接并检索父记录

c# - SqlCommand结果-无法将对象从dbnull强制转换为其他类型

php - $_PHP_SELF常量

sql-server - 如何列出 SQL Server 用户定义表类型的主键?

mysql - mysql中的每行命令

php - 在 PHP 中单独打印 MYSQL 表中的每一行

sql - 为每条记录选择多条记录