Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 分解具有未知模式的XML_Sql Server_Xml_Openxml - Fatal编程技术网

Sql server 分解具有未知模式的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> <

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

例如— 我有两个XML-

<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