虽然这适用于检索显示here的local-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
是否达到了水平?
答案 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);