SQL Server XML数据类型的差异?

时间:2010-09-28 17:13:42

标签: sql-server xml indexing

我有一个将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方面忽略了值。如果其他条件相同,那么我想考虑文件是否相同。如果任何其他元素不同,那么文档将被视为不同。

感谢所有想法。

1 个答案:

答案 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;