Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Importar XML - Cross Aplly Columnas Variables

Estas en el tema de Importar XML - Cross Aplly Columnas Variables en el foro de SQL Server en Foros del Web. Hola. Resulta que tengo un XML (cantidad de Prestaciones son variables) que importo a SQL Server y obtengo los datos con el query que les ...
  #1 (permalink)  
Antiguo 07/03/2016, 14:44
 
Fecha de Ingreso: enero-2007
Ubicación: 9 de julio
Mensajes: 111
Antigüedad: 17 años, 3 meses
Puntos: 2
Importar XML - Cross Aplly Columnas Variables

Hola.
Resulta que tengo un XML (cantidad de Prestaciones son variables) que importo a SQL Server y obtengo los datos con el query que les detallo abajo
El problema que tengo es que obtengo el siguiente resultado
Nombre Nombre Codigo
Juan Perez 10
Juan Perez 10
Juan Perez 10


Y lo que necesito es
Nombre Nombre Codigo
Juan Perez 10
Juan Perez 20
Juan Perez 30

XML: (la cantidad de Prestaciones son variables)
Código XML:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Novedad>
  3.       <Nombre>Juan</Nombre>
  4.       <Apellido>Perez</Apellido>
  5.       <Prestaciones>
  6.              <Codigo>10</Codigo>
  7.          <Codigo>20</Codigo>
  8.          <Codigo>30</Codigo>
  9.       </Prestaciones>  
  10. </Novedad>

Query:
Código SQL:
Ver original
  1. DECLARE @doc xml
  2. SELECT    @doc = BulkColumn
  3. FROM    openrowset(
  4.             bulk 'D:\Prueba2.xml', SINGLE_CLOB
  5.         ) AS xmlData
  6.  
  7. SELECT  Cabecera.VALUE('Nombre[1]', 'VARCHAR(40)') AS Nombre,
  8.         Cabecera.VALUE('Apellido[1]', 'VARCHAR(40)') AS Nombre,
  9.         Prestaciones.VALUE('Codigo[1]', 'VARCHAR(40)') AS Codigo
  10. FROM    @doc.nodes('/Novedad') AS x1(Cabecera)
  11. CROSS apply x1.Cabecera.nodes('./Prestaciones') AS x2(Prestaciones)
  12. CROSS apply x2.Prestaciones.nodes('./Codigo') AS x3(Codigo)

Etiquetas: columnas, cross, server, sql, variables, xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:06.