Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Consulta SQL Server Xml com prefixo não declarado


Seu exemplo é inválido de duas maneiras:
  1. Não é permitido ter um prefixo de namespace sem uma declaração de namespace correspondente.
  2. Seu fechamento as tags não incluem o / em todos os lugares...

Este é um hack feio, mas você pode tentar isso:
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 você não souber todos os prefixos de namespace com antecedência, isso ficará muito complicado ...