T-SQL XQuery节点值路径不匹配

时间:2016-04-19 23:11:13

标签: sql-server xquery-sql

虽然这适用于检索显示herelocal-name(.)节点名称,但我无法获得一个包含简历名字和恢复每个求职者姓氏的表格。

    USE AdventureWorks2012;

    WITH XMLNAMESPACES(
     'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume'
      AS ns)

      SELECT 
        T.rows.value('(ns:Name.First)[1]', 'nvarchar(100)') AS firstName, 
        T.rows.value('(ns:Name.Last)[1]', 'nvarchar(100)') AS lastName
      FROM HumanResources.JobCandidate
      CROSS APPLY
        Resume.nodes('//ns:Name/*') AS T(rows);

错误消息列出了上下文中的节点,包括似乎是目标节点的节点。

  

XQuery [HumanResources.JobCandidate.Resume.value()]:没有命名的元素      " {http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume} Name.First "      在类型中     " element(ns {http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume}:Name.Prefix,xs:string)|      元素(ns {http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume}: Name.First ,xs:string)

...

  

element(ns {http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume}:Name.Last,xs:string)|      元件(NS {http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume}:Name.Suffix,XS:字符串)。"

问题element是否达到了水平?

1 个答案:

答案 0 :(得分:0)

问题是上下文太深了。通过从/*路径移除nodes来解决此问题。

WITH XMLNAMESPACES(
 'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume'
  AS ns)

  SELECT 
    T.rows.value('(ns:Name.First)[1]', 'nvarchar(100)') AS firstName, 
    T.rows.value('(ns:Name.Last)[1]', 'nvarchar(100)') AS lastName
  FROM HumanResources.JobCandidate
  CROSS APPLY
    Resume.nodes('//ns:Name/*') AS T(rows);
相关问题