【问题标题】:Diff on SQL Server XML Data Type?SQL Server XML 数据类型的区别?
【发布时间】:2010-09-28 17:13:42
【问题描述】:

我有一个将 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 的值被忽略了。如果其他一切都相同,那么我想认为这些文件是相同的。如果任何其他元素不同,则文档将被视为不同。

感谢所有想法。

【问题讨论】:

    标签: sql-server xml indexing


    【解决方案1】:

    您能说明“独特的 XML”对您意味着什么吗?例如有什么区别:

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

    在您看来,有多少“不同”的 XML?

    更新

    如果您的 XML 看起来像:&lt;?xml version="1.0"?&gt;&lt;a&gt;&lt;b/&gt;&lt;c&gt;2010.09.29T10:10:00&lt;/c&gt;&lt;/a&gt;,那么您可以投影区分字段的元素并在此投影上查询:

    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 之间存在细微差别。我更新了我原来的帖子。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多