sql >> Database >  >> RDS >> Sqlserver

Kies een XML-knooppunt in SQL Server op basis van de maximale waarde van een onderliggend element

Wat dacht je hiervan:

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

U neemt in feite het "atomaire" deel zoals 'UserName' rechtstreeks uit de XML en past vervolgens een lijst van /user/token toe en extraheert u de individuele bits die u wilt - u krijgt een resultatenset van drie kolommen (UserName, ID, EndDate ) en u kunt deze bestellen en filteren.

Kanttekening:in plaats van dit:

XMLCOL.query('user/name').value('.','NVARCHAR(20)') 

waarom gebruik je dit niet - voelt veel gemakkelijker!

XMLCOL.value('(/user/name)[1]', 'NVARCHAR(20)') 



  1. Definitie van een gegevenstoegangslaag in .NET 3.5

  2. Hoe kan ik twee MySQL-tabellen synchroniseren die dezelfde structuren en een verschillende server hebben?

  3. mysql gebruikersaanmelding telt tussen groepen

  4. Salesforce TLS 1.0 Beëindiging