Ekspresi XPath Anda dapat menyebabkan beberapa baris dikembalikan, untuk setiap baris dalam tabel SQL Server. Anda harus menggunakan CROSS APPLY
dan panggilan ke .nodes()
untuk mendapatkan informasi yang Anda cari:
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)
Itu akan mengembalikan semua JobCandidateID
nilai dan semua nama depan yang didefinisikan dalam Resume
Kolom XML untuk setiap baris dalam tabel.
Jika Anda yakin bahwa hanya akan ada satu <name>
tag di kolom XML Anda, lalu Anda juga dapat mempersingkatnya menjadi:
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