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