【问题标题】:How to check id in a string column in a SQL Server 2008 table如何检查 SQL Server 2008 表中字符串列中的 id
【发布时间】: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关系建模...

标签: sql sql-server tsql sql-server-express


【解决方案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

希望对您有所帮助:)

【讨论】:

  • 它至少在我的测试数据上工作(非常小)将在电晕锁定结束后在真实数据上进行测试
  • 完美?祝你一切顺利!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 2016-03-06
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
相关资源
最近更新 更多