如何解决插入SQL表时如何避免XML中的重复
注意:这是一个示例代码和场景。使用 select 语句时我不会使用 distinct。
我第一次尝试使用 XML 将 Itemcodes 上传到一个空表中。
下面是XML数据
{"ProductDetails":"<Root>\r\n <ProductDetails>\r\n <ItemCode>2503902</ItemCode\r\n </ProductDetails>\r\n <ProductDetails>\r\n <ItemCode>3591948</ItemCode>\r\n </ProductDetails>\r\n <ProductDetails>\r\n <ItemCode>2503902</ItemCode\r\n </ProductDetails>\r\n</Root>"}
当我尝试插入表格时,我正在检查表格中是否存在项目代码并按如下方式插入
INSERT INTO inv_productdetails(ItemCode)
select T.N.value('(ItemCode/text())[1]','varchar(50)')
from @ProductDetails.nodes('Root/ProductDetails') as T(N)
where not exists (select top 1 * from dbo.inv_productdetails
where
ItemCode = T.N.value('(ItemCode/text())[1]','varchar(50)') );
我没有使用任何交易或任何东西。它是一个简单的查询来插入项目代码。
但我注意到当上面的代码运行时,它无法考虑不存在语句。
谢谢。
解决方法
这是预期的行为。
您的 WHERE
未找到 ItemCode
2503902 和 3591948。因此总 insert
成功。
可能的解决方案
1.(首选)使 inv_productdetails.ItemCode
唯一或主键
2.如果由于某种原因无法使用首选解决方案,请重写查询。您需要在插入数据之前清理输入。
INSERT inv_productdetails(ItemCode)
SELECT ItemCode
FROM (
select distinct T.N.value('(ItemCode/text())[1]','varchar(50)') ItemCode
from @ProductDetails.nodes('Root/ProductDetails') as T(N)
except
select ItemCode
from inv_productdetails) t;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。