XQuery - Obtener default namespace de un campo o variable XML

Después de dar unas cuantas vueltas, apremiado para resolver un store procedure que tenía que procesar un campo xml (usando sp_preparedocument y OpenXML) que podía tener distintos namespaces en distintos registros, es que me puse a buscar la forma de recuperar el namespace predeterminado de un xml y encontré que la forma es la siguiente.

Select CampoXML.value('namespace-uri(/*[1])','VARCHAR(100)')
u obviamente
Select @variableXML.value('namespace-uri(/*[1])','VARCHAR(100)')
Esto por ejemplo puede regresar:
urn:proyecto-version-numero-1.1
Otro ejemplo:
SELECT CampoXML.value('local-name(/*[1])', 'varchar(100)'), CampoXML.value('namespace-uri(/*[1])','VARCHAR(100)') from tabla
Donde tenemos que:
local-name devuelve el nombre del elemento raiz
y
namespace-uri devuelve el namespace predeterminado.

Hugo Román Bernachea
Mail de contacto: SQLServer777@gmail.com

Microsoft Certified DBA
Microsoft Certified Trainer
Twitter: @bernachea

Read More...