我必须将带有未知模式的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
答案 0 :(得分: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 强>