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.