xml文件去重的问题

十三徽 2016-04-26 05:34:22
比方说现在有这么一个xml文件,格式是这样,有几千条,其中不确定有多少Code="81494050004589840055"是重复的
<Data Code="81494050004589840055" CorpOrderID="9900124924 " Actor="" ActDate="2016-03-17" CorpProductID="R055" CorpBatchNo="16020132" ProduceDate="2016-02-01" ToCorpID="000026481266"/>
<Data Code="81494050004591106796" CorpOrderID="9900124924 " Actor="" ActDate="2016-03-17" CorpProductID="R055" CorpBatchNo="16020132" ProduceDate="2016-02-01" ToCorpID="000026481266"/>

现在想通过在sql server中建一张表,通过数据导入的方式将xml文件导进去,然后去掉code的重复码,可行吗??
还是有什么其他的方式可以去掉重复????
...全文
440 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
道素 2016-04-28
  • 打赏
  • 举报
回复

declare @xml varchar(max)
declare @x xml='
<Data Code="81494050004589840055" CorpOrderID="9900124924     " Actor="" ActDate="2016-03-17" CorpProductID="R055" CorpBatchNo="16020132" ProduceDate="2016-02-01" ToCorpID="000026481266"/>
<Data Code="81494050004589840055" CorpOrderID="9900124924     " Actor="" ActDate="2016-03-17" CorpProductID="R055" CorpBatchNo="16020132" ProduceDate="2016-02-01" ToCorpID="000026481266"/>
<Data Code="81494050004591106796" CorpOrderID="9900124924     " Actor="" ActDate="2016-03-17" CorpProductID="R055" CorpBatchNo="16020132" ProduceDate="2016-02-01" ToCorpID="000026481266"/>
 '
 
 select @xml=isnull(@xml,'')+t.x from (
 select convert(varchar(max),t.c.query('.') ) as x,ROW_NUMBER()over(partition by convert(varchar,t.c.query('data(@Code)')) order by getdate()) as rn
  from @x.nodes('Data')t(c)
  ) as t where t.rn=1
  select @xml
/*
<Data Code="81494050004589840055" CorpOrderID="9900124924     " Actor="" ActDate="2016-03-17" CorpProductID="R055" CorpBatchNo="16020132" ProduceDate="2016-02-01" ToCorpID="000026481266"/><Data Code="81494050004591106796" CorpOrderID="9900124924     " Actor="" ActDate="2016-03-17" CorpProductID="R055" CorpBatchNo="16020132" ProduceDate="2016-02-01" ToCorpID="000026481266"/>
*/
中国风 2016-04-28
  • 打赏
  • 举报
回复
所有列重复,直接用DISTINCT过滤,如果Code重复,其它列都不导入,把以下结果集加一个排序列处理
declare @x xml='<Data Code="81494050004589840055" CorpOrderID="9900124924     " Actor="" ActDate="2016-03-17" CorpProductID="R055" CorpBatchNo="16020132" ProduceDate="2016-02-01" ToCorpID="000026481266"/>
    <Data Code="81494050004591106796" CorpOrderID="9900124924     " Actor="" ActDate="2016-03-17" CorpProductID="R055" CorpBatchNo="16020132" ProduceDate="2016-02-01" ToCorpID="000026481266"/>
'

select distinct t.c.value('@Code','varchar(100)') from @x.nodes('Data')t(c)
唐诗三百首 2016-04-26
  • 打赏
  • 举报
回复
除了用SQL Server, 也可以用程序(如C#)直接读取xml文件,在内存中解析xml并分析.
Xiiiiin 2016-04-26
  • 打赏
  • 举报
回复
可行,用 sp_xml_preparedocument,没几行代码

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧