Biểu thức XPath của bạn có thể dẫn đến nhiều hàng được trả về, cho mỗi hàng trong bảng SQL Server. Bạn sẽ cần sử dụng CROSS APPLY
và một cuộc gọi đến .nodes()
để có được thông tin mà bạn đang theo dõi:
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)
Điều đó sẽ trả về tất cả JobCandidateID
giá trị và tất cả các tên được xác định trong Resume
Cột XML cho mỗi hàng trong bảng.
Nếu bạn có thể chắc chắn rằng sẽ chỉ có một <name>
duy nhất trong cột XML của bạn, sau đó bạn cũng có thể rút ngắn thẻ này thành:
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