2009-06-11 11 views
0

MS SQLのXMLフィールド内のフィールドを取得するにはどうすればよいですか?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> 

私は最初の二つのタグを参照する方法を知りません。私は試しました

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) 

運がありません。

答えて

3

あなたのXQueryの操作でXML名前空間(この場合は「石鹸」に加え、ノード以下のもののために別のものを)宣言する必要があります:

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]は、上に定義のURIにする必要があります<RunPackage>タグ

マーク

+0

ありがとうございました!これはほぼそのまま機能していた。私もXML宣言タグがなく、正しい名前空間URIを使用していないことに気付きました! – KTF

+0

偉大な答えは、それも私を助けた。 – cciotti

関連する問題