Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête SQL Server XML avec préfixe non déclaré

Votre exemple est invalide de deux manières :

  1. Il n'est pas autorisé d'avoir un préfixe d'espace de noms sans déclaration d'espace de noms correspondante.
  2. Votre clôture les balises n'incluent pas le / partout...

C'est un vilain hack, mais vous pouvez essayer ceci :

DECLARE @Params XML
SET @Params = REPLACE('<filter>
                      <ns0:from>2016-09-19</ns0:from>
                      <ns0:to>2017-01-01</ns0:to>
               </filter>','ns0:','');
SELECT @Params.value('(/*:filter/*:from)[1]', 'date') AS [from];

Si vous ne connaissez pas tous les préfixes d'espace de noms à l'avance, cela deviendra très délicat...