Twoje wyrażenie XPath może prowadzić do zwrócenia wielu wierszy dla każdego wiersza w tabeli programu SQL Server. Musisz użyć CROSS APPLY
i wywołanie .nodes()
aby uzyskać informacje, których szukasz:
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)
To powinno zwrócić wszystkie JobCandidateID
wartości i wszystkie imiona zdefiniowane w Resume
Kolumna XML dla każdego wiersza w tabeli.
Jeśli możesz być pewien, że zawsze będzie tylko jeden <name>
w Twojej kolumnie XML, możesz również skrócić go do:
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