如何使用“nodes”命令在SQLXML查询中使用名称空间?

如何使用“nodes”命令在SQLXML查询中使用名称空间?,sql,xml,xsd,xml-namespaces,Sql,Xml,Xsd,Xml Namespaces,我试图从以下XML查询中查询字段,这实际上是一个web服务调用: <soap:Envelope xmlns:xsi="[schema]" xmlns:xsd="[shema]" xmlns:soap="[schema]"> <soap:Body> <RunPackage xmlns="http://tempuri.org/"> <xmlDoc> <Request> <Su

我试图从以下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>
[...]
它运行但不返回任何重试

如果我构建了相同的查询,但删除了名称空间的内容,那么它就可以工作了。例如,以下方法可以很好地工作:

543253 54325 TestBranchName [……]

SQL查询:

-为MIT定义名称空间,以便我们可以使用MIT名称空间。 使用XMLNAMESPACES“[schema]” 与soap2一样,默认为 “[schema]”

选择TransactionID, T2.Loc.将“dataRequest/SubscriberCode”查询为“SubscriberCode” 从临时工作请求 交叉应用RequestXML.nodes'xmlDoc'作为T2Loc


有什么想法吗?

找到了问题,谢谢马克!名称空间必须显式声明

新的工作查询:

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)
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)