Вашият XPath израз може да доведе до връщане на множество редове за всеки ред в таблицата на SQL Server. Ще трябва да използвате CROSS APPLY
и извикване на .nodes()
за да получите тази информация, която търсите:
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)
Това трябва да върне всички JobCandidateID
стойности и всички собствени имена, дефинирани в Резюме
XML колона за всеки ред в таблицата.
Ако можете да сте сигурни, че някога ще има само един <име>код> във вашата XML колона, тогава можете също да съкратите това до:
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