首页 > 解决方案 > 在 SQL Server 中解析多根 XML

问题描述

我需要从存储在 SQL Server 的 xml 列中的数据中获取多个属性。

XML 数据是多根的,我无法获取超出“

这是 XML 的一个片段:

<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" 
     xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" 
     xmlns:rs="urn:schemas-microsoft-com:rowset" 
     xmlns:z="#RowsetSchema">
    <s:Schema id="RowsetSchema">
        <s:ElementType name="row" content="eltOnly" rs:CommandTimeout="300">
            <s:AttributeType name="GmID" rs:number="1" rs:writeunknown="true">
                <s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" rs:maybenull="false"/>
            </s:AttributeType>
       </s:ElementType>
    </s:Schema>
    <rs:data>
            <z:row GmID="550733" ReadingTime="2019-09-23T15:44:58" DataSequenceNumber="132978"/>
    </rs:data>
</xml>

<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" 
     xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" 
     xmlns:rs="urn:schemas-microsoft-com:rowset" 
     xmlns:z="#RowsetSchema">
     <s:Schema id="RowsetSchema">
        <s:ElementType name="row" content="eltOnly" rs:CommandTimeout="300">
            <s:AttributeType name="GmID" rs:number="1" rs:writeunknown="true">
                <s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" rs:maybenull="false"/>
            </s:AttributeType>
            </s:ElementType>
    </s:Schema>
      <rs:data>
            <z:row GmID="550733" ReadingTime="2019-09-23T15:44:58" DataSequenceNumber="133008"/>
          </rs:data>
</xml>

如何获取“

标签: sqlsql-server

解决方案


您可以使用以下语法获取任何属性。如果性能很重要,您可以为查询声明名称空间,而不是使用“*”。

select x.value('./*:data[1]/*:row[1]/@DataSequenceNumber','int')
from  @x.nodes('/xml') as t(x)

将返回:

132978  
133008

推荐阅读