3

我必须将具有未知模式的 XML 切碎到表中。我不知道 XML 中有哪些元素。而且我也不知道 XML 格式。在某些情况下,XML 数据以属性为中心,在某些情况下,它以元素为中心。

例如 - 我有两个 XML -

<Root>
   <Recorset>
       <RecordsetId>1</RecordsetId>
       <RecordsetName>name1</RecordsetName>
  </Recorset>
</Root>

<Root>
     <Recorset RecordsetId="2" RecordsetName="name2"></Recorset>
</Root>

XML 可以有任何其他元素/属性。我需要使用从 OPENXML 生成的 EDGE 表来捕获元素/属性名称和相应的数据。

最简单的方法是什么?

我需要给定格式的输出 -

RecodrsetId   RecordsetName
1             Name1
2             Name2
4

1 回答 1

3

像这样的东西?

select
    C.Name,
    C.Value
from @Data.nodes('//*') as T(C)
    outer apply (
        select
            T.C.value('local-name(.)', 'nvarchar(max)') as Name,
            T.C.value('(./text())[1]', 'nvarchar(max)') as Value
        union all
        select
            A.C.value('local-name(.)', 'nvarchar(max)') as Name,
            A.C.value('.', 'nvarchar(max)') as Value
        from T.C.nodes('@*') as A(C)
    ) as C
where C.Value is not null

sql fiddle demo

于 2013-09-23T18:51:22.627 回答