我有一个将XML文档插入SQL Server 2008表的自动化过程,该列是XML类型。有很多重复的数据,我想知道是否有人可以推荐一种基于XML列删除非不同值的好方法?该表有数千行,每个XML文档大约70k。
除了一个元素值之外,每个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>
我想假装在diff方面忽略了值。如果其他条件相同,那么我想考虑文件是否相同。如果任何其他元素不同,那么文档将被视为不同。
感谢所有想法。
答案 0 :(得分: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;