SQL Server XML数据类型的差异?
问题描述:
我有一个将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>
我想要假装在差异时忽略它的值。如果一切都是平等的,那么我想考虑的文件是相同的。如果其他元素不同,那么这些文档将被认为是不同的。
感谢您的所有想法。
答
你能否认定“独特的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;
谢谢你的问题,其实有轻微XML LOB之间的区别。我更新了我原来的帖子。谢谢。 – Snowy 2010-09-29 10:31:20