[ Foro de SQL (y MySQL) ]

sql server - xml

03-Nov-2020 11:43
ANTONIO GIL
0 Respuestas

Tengo un xml con distintos niveles de nodos

SELECT
MY_XML.Cierre.query('/DatosRC/Cierre/ContadorCierre').value('.', 'INT') AS ContadorCierre,
MY_XML.Cierre.query('/DatosRC/Cierre/CodMaquina').value('.', 'INT') AS CodMaquina,
MY_XML.Cierre.query('/DatosRC/Cierre/FechaCierre').value('.', 'DATE')  AS FechaCierre,
MY_XML.Cierre.query('/DatosRC/Cierre/HoraCierre').value('.', 'TIME') AS HoraCierre,
MY_XML.Cierre.query('/DatosRC/Cierre/CodUsuario').value('.', 'INT') AS CodUsuario,
MY_XML.Cierre.query('/DatosRC/Cierre/CodClienteIsis').value('.', 'INT') AS CodClienteIsis,
MY_XML.Cierre.query('/DatosRC/Cierre/FechaTraspaso').value('.', 'DATE') AS FechaTraspaso,
MY_XML.Cierre.query('/DatosRC/Cierre/HoraTraspaso').value('.', 'nvarchar(max)') AS HoraTraspaso,
-- Nodo Liquidacion
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ContadorLiq').value('.', 'INT') AS ContadorLiq,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/CodConductor').value('.', 'INT') AS CodConductor,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/FechaLiquidacion').value('.', 'DATE') AS FechaLiquidacion,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/HoraLiquidacion').value('.', 'TIME') AS HoraLiquidacion,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/Recaudacion').value('.', 'INT') AS Recaudacion,
-- Nodo Calidad/Pregunta
MY_XML.Cierre.query('Codigo').value('.', 'INT') AS Codigo,
MY_XML.Cierre.query('Posicion').value('.', 'INT') AS Posicion,
MY_XML.Cierre.query('Respuesta').value('.', 'INT') AS Respuesta,
MY_XML.Cierre.query('Fecha').value('.', 'nvarchar(max)') AS Fecha,
MY_XML.Cierre.query('Hora').value('.', 'nvarchar(max)') AS Hora,
-- Nodo Lista/Servicios **************
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/ContadorServ').value('.', 'varchar(255)') AS ContadorServ,  
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/CodVehiculo').value('.', 'varchar(255)') AS CodVehiculo,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/CodLinea').value('.', 'varchar(255)') AS CodLinea,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/CodItinerario').value('.', 'varchar(255)') AS CodItinerario,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/Sentido').value('.', 'varchar(255)') AS Sentido,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/Orden').value('.', 'varchar(255)') AS Orden,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/CodParadaOrigen').value('.', 'varchar(255)') AS CodParadaOrigen,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/CodParadaDestino').value('.', 'varchar(255)') AS CodParadaDestino,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/FechaInicioPrevista').value('.', 'varchar(255)') AS FechaInicioPrevista,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/HoraInicioPrevista').value('.', 'varchar(255)') AS HoraInicioPrevista,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/FechaInicioReal').value('.', 'varchar(255)') AS FechaInicioReal,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/HoraInicioReal').value('.', 'varchar(255)') AS HoraInicioReal,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/FechaFinReal').value('.', 'varchar(255)') AS FechaFinReal,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/HoraFinReal').value('.', 'varchar(255)') AS HoraFinReal,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/KmInicial').value('.', 'varchar(255)') AS KmInicial,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/KmFinal').value('.', 'varchar(255)') AS KmFinal ,
MY_XML.Cierre.query('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/ListaServicios/Servicio/Anulada').value('.', 'varchar(255)') AS Anulada
FROM (SELECT CAST(MY_XML AS xml)
     FROM OPENROWSET(BULK
 'C:\···· SERVER-25 ····\Programacion\Mantenimiento [Repaso] (Programado-Realizado)\RC_CIE_9823_00768_20201001000023.XML', SINGLE_BLOB) AS T(MY_XML)) AS T(MY_XML)
     CROSS APPLY MY_XML.nodes('/DatosRC/Cierre/ListaLiquidaciones/Liquidacion/Calidad/Pregunta') AS MY_XML (Cierre)
   ;

quiero extraer tal cual en tabla todo lo que trae el xml, pero en el caso de Nodo Lista/servicios, no desglosa sino que junta todos los valores en un solo campo y lo que intento es que como los nodos anteriores desglose registro a registro. Entiendo que es un tema de root

Gracias




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)