【问题标题】:T-SQL XQuery Node Value Path not MatchingT-SQL XQuery 节点值路径不匹配
【发布时间】:2016-04-19 23:11:12
【问题描述】:

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

    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}:姓名.名字” 在类型 “元素(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)

...

元素(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:string)"。

element是不是降级的问题?

【问题讨论】:

    标签: sql-server xquery-sql


    【解决方案1】:

    问题是上下文太深了。通过从 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多