0

MS SQL で XML フィールド内のフィールドを取得するにはどうすればよいですか?

この XML コードを使用するたびに、試行するすべてのクエリが意図したとおりに機能しません。

<soap:Envelope xmlns:xsi="[URI]" xmlns:xsd="[URI]" xmlns:soap="[URI]">
  <soap:Body>
    <RunPackage xmlns="[URI]">
      <xmlDoc>
        <Request>
          <SubscriberCode>76547654</SubscriberCode>
          <CompanyCode></CompanyCode>
        </Request>
      </xmlDoc>
    </RunPackage>
  </soap:Body>
</soap:Envelope>

最初の 2 つのタグを参照する方法がわかりません。私はもう試した

SELECT TransactionID, T2.Loc.query('data(Request/SubscriberCode)') as 'SubscriberCode'
FROM   TempWorksRequest
CROSS APPLY RequestXML.nodes('soap:Envelope/soap:Body/RunPackage/xmlDoc') as T2(Loc) 

運がない。

4

1 に答える 1

3

XQuery 操作で XML 名前空間 (この場合は "soap" に加えて、ノードとその下にある別の名前空間) を宣言する必要があります。

SELECT 
   TransactionID, 
   T2.Loc.query('declare namespace ns="[URI1]";data(ns:Request/ns:SubscriberCode)') 
     as 'SubscriberCode'
FROM   
   TempWorksRequest
CROSS APPLY 
   RequestXML.nodes('declare namespace soap="[URI]";
                     declare namespace ns="[URI1]";
                     soap:Envelope/soap:Body/ns:RunPackage/ns:xmlDoc') as T2(Loc)

[URI1]<RunPackage>タグで定義されている URI である必要があります。

マルク

于 2009-06-11T20:29:13.673 に答える