Leer un fichero xml desde sql server 2008

Preguntado hace 10 meses

Guillermo Barrios
Editado hace 10 meses
Votos
PositivosNegativosTotal
2 0 2
48 Visualizaciones
Compártelo: Compártelo en twitterCompártelo en Facebook

Buenas, tengo un fichero xml y quería leerlo desde sql server 2008 para hacer una importación. No es un proceso que se vaya a hacer más veces, no necesito nada demasiado automático en ese sentido, pero lo que sí estaría bien sería poderle hacer selects desde el sql server al xml para hacer inserts-select.

¿Alguno lo ha hecho?

Saludos.

Actualizando datos
Interesante pregunta,muy útil Johan Ramírez hace 9 meses

2 Respuestas

Hace 10 meses

Julián Mur
Editada hace 10 meses
Votos
PositivosNegativosTotal
202

Hola, Guillermo, he estdo revisando mis scripts y tienes razón para ficheros muy gordos lo que hago es crear otra tabla con un campo xml:

CREATE TABLE [dbo].[Importacion](
    [xmlOriginal] [xml] NOT NULL
) 

Llenamos esa tabla en un solo campo todo el xml, ojo es un campo de tipo XML.

insert into Importacion (xmlOriginal)
SELECT cast(x as xml)
FROM OPENROWSET(
     BULK 'C:\carpeta\fichero.xml',
     SINGLE_BLOB) AS T(x)

No olvides borrar esta tabla!! ;)

Y luego desde esa a la intermedia.

CREATE TABLE [dbo].[tablaIntermedia](
    campoA [nvarchar](MAX) NULL,
    campoB [nvarchar](MAX) NULL
) 



insert into tablaIntermedia (campoA,
    campoB)
SELECT X.registro.query('campoA').value('.', 'NVARCHAR(MAX)'),
       X.registro.query('campoB').value('.', 'NVARCHAR(MAX)')             
FROM Importacion
CROSS APPLY x.nodes('nodoRaiz/Registro') AS X(registro);

El problema que tiene la anterior propuesta es que tiene que tratarlo desde el fichero lo cual da un rendimiento penoso.

Cerrar

Este tema es interesante Johan Ramírez hace 9 meses
Muuucho mejor, muuuuchas gracias! Guillermo Barrios hace 10 meses
Gracias ^^ Lo pruebo y te digo, un saludo! Guillermo Barrios hace 10 meses

Hace 10 meses

Julián Mur
Votos
PositivosNegativosTotal
101

Hola, Guillermo,

yo las veces que lo he hecho he utilizado una tabla intermedia. Es decir vuelco primero todos los datos a una tabla sin ningún tipo de restricción y con campos nvarchar y luego desde esa ya hago la conversión. ¿Por qué? Porque a veces los ficheros xml adquieren unas dimensiones enormes y la lectura lleva mucho tiempo, con lo que las pruebas de cómo convertir se hacen eternas. Te pongo algo de código para ayudarte:

CREATE TABLE [dbo].[tablaIntermedia](
    campoA [nvarchar](MAX) NULL,
    campoB [nvarchar](MAX) NULL
) 



insert into tablaIntermedia (campoA,
    campoB)
SELECT X.registro.query('campoA').value('.', 'NVARCHAR(MAX)'),
       X.registro.query('campoB').value('.', 'NVARCHAR(MAX)')             
FROM ( 
SELECT CAST(x AS XML)
FROM OPENROWSET(
     BULK 'C:\carpeta\fichero.xml',
     SINGLE_BLOB) AS T(x)
     ) AS T(x)
CROSS APPLY x.nodes('nodoRaiz/Registro') AS X(registro);

Un saludo.

Cerrar

Hola, con un fichero pequeño me funciona, pero con el que necesito, 80 megas, se queda tostado horas y no consigo que termine :/ ¿Se te ocurre otra cosa? Guillermo Barrios hace 10 meses

Tu respuesta

Confirmación

Cerrar

Si sales ahora, perderás los cambios. ¿Estás seguro de querer salir?

Para participar en Babelias, debes estar convenientemente validado. Si ya eres usuario inicia sesión, si no lo eres, te puedes registrar.

Dar una respuesta

Trata de ser descriptivo, usa al menos 25 caracteres