Làm thế nào về điều này:
SELECT
TOP 1
XMLCOL.value('(/user/name)[1]', 'nvarchar(20)') as 'UserName',
Usr.Token.value('(id)[1]', 'nvarchar(20)') AS 'ID',
Usr.Token.value('(endDate)[1]', 'DateTime') as 'EndDate'
FROM
dbo.MyTable
CROSS APPLY
xmlcol.nodes('/user/token') AS Usr(Token)
ORDER BY
Usr.Token.value('(endDate)[1]', 'DateTime') DESC
Về cơ bản, bạn lấy phần "nguyên tử" như 'Tên người dùng' trực tiếp từ XML, sau đó áp dụng chéo danh sách / người dùng / mã thông báo và trích xuất các bit riêng lẻ mà bạn muốn - bạn nhận được tập hợp kết quả gồm ba cột (Tên người dùng, ID, Ngày kết thúc ) và bạn có thể đặt hàng và lọc chúng.
Lưu ý phụ:thay vì thế này:
XMLCOL.query('user/name').value('.','NVARCHAR(20)')
tại sao bạn không sử dụng cái này - cảm thấy dễ dàng hơn nhiều!
XMLCOL.value('(/user/name)[1]', 'NVARCHAR(20)')