Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Query XML di SQL Server con prefisso non dichiarato

Il tuo esempio non è valido in due modi:

  1. Non è consentito avere un prefisso dello spazio dei nomi senza una dichiarazione dello spazio dei nomi corrispondente.
  2. La tua chiusura i tag non includono il / ovunque...

Questo è un brutto trucco, ma potresti provare questo:

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];

Se non conosci tutti i prefissi degli spazi dei nomi in anticipo, questo diventerà davvero complicato...