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

Interroger les types de données XML qui ont des attributs de nœud xmlns

Si votre document XML contient des espaces de noms XML, vous devez en tenir compte dans vos requêtes !

Donc, si votre XML ressemble à votre échantillon, alors vous avez besoin :

-- define the default XML namespace to use
;WITH XMLNAMESPACES(DEFAULT 'bar')
SELECT   
    x.u.value('Name[1]', 'varchar(100)') as Name
from 
    @XMLDOC.nodes('/Feed/Product') x(u)

Ou si vous préférez avoir un contrôle explicite sur l'espace de noms XML à utiliser (par exemple, si vous en avez plusieurs), utilisez des préfixes d'espace de noms XML :

-- define the XML namespace 
;WITH XMLNAMESPACES('bar' as b)
SELECT   
    x.u.value('b:Name[1]', 'varchar(100)') as Name
from 
    @XMLDOC.nodes('/b:Feed/b:Product') x(u)