4

次のXMLクエリ(実際にはWebサービス呼び出し)からフィールドをクエリしようとしています。

<soap:Envelope xmlns:xsi="[schema]" xmlns:xsd="[shema]" xmlns:soap="[schema]">
  <soap:Body>
    <RunPackage xmlns="http://tempuri.org/">
      <xmlDoc>
        <Request>
          <SubscriberCode>543253</SubscriberCode>
          <CompanyCode>54325</CompanyCode>
          <BranchName>TestBranchName</BranchName>
          <TempWorksUserName>TempWorksUserName</TempWorksUserName>
[...]

次のXMLクエリを使用します。

WITH XMLNAMESPACES('[schema]' AS soap2, DEFAULT '[schema]')

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

実行されますが、結果は返されません。

同じクエリを作成しても名前空間のものを削除すると、機能します。たとえば、次のように正常に機能します。

<xmlDoc> <Request> <SubscriberCode> 543253 </ SubscriberCode> <CompanyCode> 54325 </ CompanyCode> <BranchName> TestBranchName </ BranchName> [...]

SQLクエリ:

--MITS名前空間を使用できるように、MITSの名前空間を定義します。WITH XMLNAMESPACES('[schema]' AS soap2、DEFAULT'[schema]')

SELECT TransactionID、T2.Loc.query('data(Request / SubscriberCode)')as'SubscriberCode' FROM TempWorksRequest CROSS APPLY RequestXML.nodes('xmlDoc')as T2(Loc)

何か案は?

4

1 に答える 1

5

マークのおかげで問題が見つかりました! 名前空間は明示的に宣言する必要があります。

新しい作業クエリ:

WITH XMLNAMESPACES('[URI1]' AS ns, '[URI2]' AS soap) 

SELECT TransactionID, 
    T2.Loc.query('data(ns:SubscriberCode)') as 'SubscriberCode',
FROM TempWorksRequest
CROSS APPLY RequestXML.nodes('soap:Envelope/soap:Body/ns:RunPackage/ns:xmlDoc/ns:Request') as T2(Loc)
于 2009-06-11T21:09:37.867 に答える