如何检查 SQL Server 2008 表中字符串列中的 id

Posted

技术标签:

【中文标题】如何检查 SQL Server 2008 表中字符串列中的 id【英文标题】:How to check id in a string column in a SQL Server 2008 table 【发布时间】:2020-03-31 15:59:26 【问题描述】:

我有一个表,它将其他表的整数 ID 存储为逗号分隔的字符串列。现在我想在这个字符串列中找到这个表中所有具有特定 ID 的行。

例子

InwardHeader 
(
     inhdrid numeric(18, 0), 
     inwardno numeric(10, 0), 
     inwarddt datetime, 
     item numeric(10), 
     qty numeric(18, 2)
)

StockOutward 
(
    Stkouthdrid numeric(18, 0), 
    stkoutno numeric(18, 0), 
    stkoutdt datetime, 
    item numeric(10), 
    inwardids varchar(100)
)

StockOutward.inwardids 列包含多个InwardHeader.inhdrid 的逗号分隔值

我想从 stockoutward 中查找包含特定值的 inwardheader.inhdrid 的行

【问题讨论】:

您应该以文本格式提供示例数据和预期输出。 您应该将多个值存储到单个列中 - 这甚至违反了正确数据库设计的第一范式,并且非常困难并且烦人地做任何连接和其他任何事情,也是。既然您已经拥有一个关系数据库,那么您应该使用适当的关系手段来为这种1:n关系建模... 【参考方案1】:

首先,将 id 存储在以逗号分隔的字符串字段上是不好的做法, 您应该使用 1:N 关系, 无论如何,我为您准备了一个解决方案(经过测试),如下所示:

SELECT [Stkouthdrid]
      ,[stkoutno]
      ,[stkoutdt]
      ,[item]
      ,[inwardids]
  FROM [test].[dbo].[StockOutward] 
  where  CHARINDEX((
  SELECT convert(varchar(10),[inhdrid])
  FROM [test].[dbo].[InwardHeader]
  where [inhdrid]=0), [inwardids]) > 0

希望对您有所帮助:)

【讨论】:

它至少在我的测试数据上工作(非常小)将在电晕锁定结束后在真实数据上进行测试 完美?祝你一切顺利!!

以上是关于如何检查 SQL Server 2008 表中字符串列中的 id的主要内容,如果未能解决你的问题,请参考以下文章

sql server 2008中“Merge”子句的性能如何?

如何在 SQL Server 2008 中转换文本字符串中的哈希密码

如何将excel数据加载到sql server 2008表中?

如何从临时表中检索字段名称 (SQL Server 2008)

如何在 SQL Server 2008 R2 表中添加“上次更新”列?

如何从 sql server 2008 中具有不同 TaskIds 的表中查找日期?