Sql server 分解具有未知模式的XML
我必须将模式未知的XML分解到表中。我不知道XML中有哪些元素。我也不知道XML格式。在某些情况下,XML数据以属性为中心,在某些情况下,它以元素为中心 例如— 我有两个XML-Sql server 分解具有未知模式的XML,sql-server,xml,openxml,Sql Server,Xml,Openxml,我必须将模式未知的XML分解到表中。我不知道XML中有哪些元素。我也不知道XML格式。在某些情况下,XML数据以属性为中心,在某些情况下,它以元素为中心 例如— 我有两个XML- <Root> <Recorset> <RecordsetId>1</RecordsetId> <RecordsetName>name1</RecordsetName> </Recorset> <
<Root>
<Recorset>
<RecordsetId>1</RecordsetId>
<RecordsetName>name1</RecordsetName>
</Recorset>
</Root>
像这样的
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
谢谢@Roman的回答。但我找不到任何从检索到的数据创建透视表的方法。我对问题进行了编辑,以提及预期产出。抱歉,之前没有提到它。@AgentSQL那么您想要动态列吗?我的意思是,您希望从xml获取所有元素/属性,然后动态创建n列?或者你只想要记录集ID,记录集名称?是的,先生。我需要动态创建n列。@AgentSQL和您的XML可以是任何内容?这可能很棘手,尤其是将节点按行链接在一起,如果您不了解xmlYes,它可能是任何东西。我尝试在OPENXML生成的边缘表上使用关系,但它需要大量的字符串操作。我一次只能处理一种格式(以元素为中心或以属性为中心)。
RecodrsetId RecordsetName
1 Name1
2 Name2
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