query dinamico a campo XML
Publicado por Alejandro Munguía (1 intervención) el 18/09/2014 22:48:29
Estimados, humildemente les pido ayuda para lo siguiente:
Utilizo Sql Server 2008 R2.
Tengo una tabla llamada DATOS , es la siguiente:
El campo CODIGO es un uniqueidentifier.
El campo DETALLE es un xml.
Quiero realizar un select donde me lea el campo xml por lo que realizo el siguiente query:
Y me obtiene el siguiente resultado de forma correcta:
Mi problema es que si en el campo de xml (DETALLE) existiera 100 o mas campos (en el ejemplo hay 4 campos), ¿como puedo realizar un query dinamico que sin importar el numero de campos que existiese dentro del xml se muestren todos los campos?
Agradezco toda la ayuda que me puedan brindar.
Utilizo Sql Server 2008 R2.
Tengo una tabla llamada DATOS , es la siguiente:
1
2
3
CODIGO DETALLE
1 <ROW><FIELDS Nombre="Jose" Apellido="Orroa" Telef="4654564" Email="jorroa@gmail.com" /></ROW>
2 <ROW><FIELDS Nombre="Ana" Apellido="Zutch" Telef="4654564" Email="jazutch@gmail.com" /></ROW>
El campo CODIGO es un uniqueidentifier.
El campo DETALLE es un xml.
Quiero realizar un select donde me lea el campo xml por lo que realizo el siguiente query:
1
2
3
4
5
6
7
SELECT A.CODIGO,
TBL.COL.value('@Nombre', 'Varchar(30)') as NOMBRE,
TBL.COL.value('@Apellido', 'Varchar(30)') as APELLIDO,
TBL.COL.value('@Fono', 'Varchar(10)') as TELEF,
TBL.COL.value('@Email', 'Varchar(100)') as CORREO
FROM DATOS A
CROSS APPLY a.DETALLE.nodes('ROW/FIELDS') TBL(COL)
Y me obtiene el siguiente resultado de forma correcta:
1
2
3
CODIGO NOMBRE APELLIDO TELEF CORREO
1 Jose Orroa 4654564 jorroa@gmail.com
2 Ana Zutch 4654564 jazutch@gmail.com
Mi problema es que si en el campo de xml (DETALLE) existiera 100 o mas campos (en el ejemplo hay 4 campos), ¿como puedo realizar un query dinamico que sin importar el numero de campos que existiese dentro del xml se muestren todos los campos?
Agradezco toda la ayuda que me puedan brindar.
Valora esta pregunta


0