2010-09-28 393 views
0

我有一个将XML文档插入到SQL Server 2008表的自动过程,该列是类型XML。有很多重复的数据,我想知道是否有人可以推荐一个好的方法来删除基于XML列的非独特值?该表有成千上万行,每个XML文档约为70k。SQL Server XML数据类型的差异?

每个XML文档看起来除了一个元件值是相同的,例如:

行1,列C:

<?xml version="1.0"?><a><b/><c>2010.09.28T10:10:00</c></a> 

行2,列C:

<?xml version="1.0"?><a><b/><c>2010.09.29T10:10:00</c></a> 

我想要假装在差异时忽略它的值。如果一切都是平等的,那么我想考虑的文件是相同的。如果其他元素不同,那么这些文档将被认为是不同的。

感谢您的所有想法。

回答

1

你能否认定“独特的XML”对你来说意味着什么?例如之间有什么区别:

  • <a><b/></a>
  • <?xml version="1.0"?><a><b/></a>
  • <a xmlns:xhtml="http://www.w3.org/1999/xhtml"><b/></a>
  • <a><b xsi:nil="true" /></a>
  • <a><b></b></a>
  • <?xml version="1.0" encoding="UTF-8"?><a><b/></a>
  • <?xml version="1.0" encoding="UTF-16"?><a><b></b></a>

在您看来,有多少'独特'的XML?

更新

如果你的XML是什么样子:<?xml version="1.0"?><a><b/><c>2010.09.29T10:10:00</c></a>那么你可以预计,区分场和查询这一预测的因素:

with cte_x as (
    select xmlcolumn.value(N'(//a/c)[1]', N'DATETIME') as xml_date_a_c, 
    ... 
    from table 
), 
cte_rank as (
    select row_number() over (partition by xml_date_a_c order by ...) as rn 
    from cte_x) 
delete from cte_rank 
    where rn > 1; 
+0

谢谢你的问题,其实有轻微XML LOB之间的区别。我更新了我原来的帖子。谢谢。 – Snowy 2010-09-29 10:31:20