Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server XQuery gibt einen Fehler zurück

Ihr XPath-Ausdruck könnte dazu führen, dass für jede Zeile in der SQL Server-Tabelle mehrere Zeilen zurückgegeben werden. Sie müssen ein CROSS APPLY verwenden und ein Aufruf von .nodes() um die gewünschten Informationen zu erhalten:

WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume' AS ns)
SELECT 
    JobCandidateID,
    ResNames.value('(ns:Name.First)[1]', 'nvarchar(100)')
FROM   
    HumanResources.JobCandidate
CROSS APPLY
    [Resume].nodes('/ns:Resume/ns:Name') AS XTbl(ResNames)

Das sollte alle JobCandidateID zurückgeben Werte und alle im Resume definierten Vornamen XML-Spalte für jede Zeile in der Tabelle.

Wenn Sie sicher sein können, dass es immer nur einen einzigen <name> geben wird Tag in Ihrer XML-Spalte, dann könnten Sie dies auch verkürzen zu:

WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume' AS ns)
SELECT 
    JobCandidateID,
    [Resume].value('(/ns:Resume/ns:Name/ns:Name.First)[1]', 'nvarchar(100)')
FROM   
    HumanResources.JobCandidate