2009-06-11 71 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>标记。

Marc

+0

非常感谢!这几乎功能逐字。我注意到我还缺少一个XML声明标记,并没有使用正确的名称空间URI! – KTF 2009-06-11 20:57:25