在 SQL 的 INT 列中输入逗号分隔的字符串

Posted

技术标签:

【中文标题】在 SQL 的 INT 列中输入逗号分隔的字符串【英文标题】:Entering a comma delimited string into an INT column in SQL 【发布时间】:2016-10-28 19:45:18 【问题描述】:

我正在尝试将逗号分隔的字符串添加到我的表中设置为 INT 的列中。 我用它来引用类别 ID,但现在我希望可以添加不止 1 个类别。

认为我可以通过输入如下字符串来完成此操作:1,2,3 而不是仅 1,但我收到错误,即此单元格中的更改值未被识别为有效。

这是否意味着我需要将该列更改为 VARCHAR 而不是 INT?

【问题讨论】:

您所描述的内容听起来像是多对多关系。处理这个问题的正确方法不是将一堆值填充到单个单元格中。这是一场噩梦。您尝试建模的数据称为关联实体。您处理此问题的方式称为桥接表。如果您创建具有两列(ProductID 和 CategoryID)的第三个表,这意味着什么。然后为每个产品的每个类别在此表中添加一行。 谢谢肖恩,我现在理解得更好了。我会查找关联条目以更好地理解。 【参考方案1】:

不,这意味着您应该设置适当的表来支持一对多关系。也就是说,您需要一个单独的 ,而不是 varchar 列中的虚假数据表示。

为什么?好吧,SQL 有一个很棒的列表数据结构,称为 table。另外:

数字应该以原生格式存储,而不是字符串。 SQL 处理字符串的功能(相对)较差。 对列的操作不会利用索引。 如果数字代表另一个表中的 id,则不能声明正确的外键引用。

【讨论】:

你能给我一个例子吗? 我有一个单独的表格,其中列出了我的类别和唯一的 ID。我使用 ID 来引用主表上的哪些行与辅助表上的类别匹配。 @AlexP 。 . .您应该使用示例数据提出另一个问题,并描述您想了解的有关设置正确连接表的内容。 Sean Lange 的评论帮助我找到了需要查找的内容。我现在正在阅读多对多关系。一旦我有一些代码要显示,我将发布一个新问题。谢谢

以上是关于在 SQL 的 INT 列中输入逗号分隔的字符串的主要内容,如果未能解决你的问题,请参考以下文章

sql SQL - 在以逗号,管道或分号或任何其他字符分隔的列中获取多个值或连接值的值

在数据网格列中添加点分隔符而不是逗号

SQL 将 2 个表合并在一列中,以逗号分隔

在SQL过程中将一列中的逗号分隔值拆分为多列

SQL查询以从逗号分隔的列中检索值[重复]

SQL:将行与列中的逗号分隔值合并