2016-04-19 10 views
1

Während dies funktioniert local-name(.) Knotennamen wie aufgezeigte here abrufen kann ich nicht eine Tabelle mit Lebenslauf Vorname und Lebenslauf Nachname für jeden Job-Kandidaten.T-SQL-XQuery-Node-Wert Pfad nicht übereinstimmend

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

Die Fehlernachricht listet die Knoten auf, die sich im Kontext befinden, einschließlich des scheinbar Zielknotens.

XQuery [HumanResources.JobCandidate.Resume.value()]: Es gibt kein Element den Namen "{} http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume: Name.First" in dem Typ „Element (ns {http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume}: Name .Prefix, xs: string) | Element (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) | Element (ns {http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume}: Name.Suffix, xs: string).“

Ist das Problem, dass die element eine Ebene nach unten

Antwort

0

Problem war, dass Kontext ein Niveau zu tief war behoben?. von /* von nodes Weg zu entfernen.

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