如何检查 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)