Bulk insert en SQL Server
Una de las funciones muy poderosas que tiene T-SQL es la instrucción de Bulk Insert, nos permite desde SQL Server cargar datos masivamente a las tablas utilizando el poder de procesamiento del servidor.
Para realizar este proceso es necesario tener en cuenta que el archivo que tiene la información debe ser del tipo .csv; para nuestro ejemplo práctico utilizaremos el siguiente archivo.
Ahora veamos la estructura principal que debe de tener la consulta.
BULK INSERT NombreTabla
FROM 'RutaDeArchivo'
WITH (
FIELDTERMINATOR = ';', --Carácter separador
ROWTERMINATOR = '\n', --Carácter de fin de fila
FIRSTROW = 1--Fila de inicio de recorrido
);
Toma en cuenta las líneas conectadas, en la sección WITH colocamos los filtros que debe de tomar en cuenta al obtener los datos del archivo csv.
Importante mencionar que SQL debe tener acceso al directorio de archivos, por lo tanto, proporciona los permisos necesarios.
Podría interesarte Consultar valores de un XML en SQL Server
Tabla de SQL
Antes de escribir la consulta debemos de tener la tabla en donde almacenaremos la información; Por lo tanto, para este ejercicio utilizaremos una tabla genérica como la siguiente.
Lo puedes crear utilizando la siguiente consulta.
CREATE TABLE dbo.TbPruebas(
[Id] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Descripcion] [nvarchar](120) NOT NULL,
[Estado] [bit] NOT NULL
)
¿Cómo utilizar Bulk Insert en SQL Server?
Ahora veamos cómo utilizar bulk insert en el management studio de SQL; mi consulta será de la siguiente manera.
BULK INSERT dbo.TbPruebas
FROM 'C:\Pruebas\Datos.csv'
WITH (
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n',
FIRSTROW = 2
);
FIRSTROW=2, debido a que los datos de mi archivo empiezan en la segunda fila, en la primera fila tengo el encabezado (considera este punto en tu archivo).
Ejecutemos la consulta, esta operación puede demorar algunos segundos dependiendo de la cantidad de datos y la capacidad del servidor; si todo sale bien obtenemos el siguiente resultado de salida y para comprobar la información hacemos una consulta a la tabla.
Algo impórtate de mencionar es que, aunque tengas una columna auto incrementable en tu tabla de la BD, esa columna también debe estar en el archivo de datos; tal como lo vemos en el archivo que utilizo en el ejemplo.
Problemas comunes
Algunos de los problemas que puedes tener al realizar este tipo de operaciones son las siguientes.
- Numero de columnas obtenidas a partir del carácter separador.
- Tipos de datos del archivo no coinciden con el tipo de dato de la columna de la tabla.
- Ruta del archivo no accesible o no encontrada.
- Tipo de archivo no valido (en el archivo de este ejemplo te muestro las propiedades).
Conclusiones
Como pudieron notar esta instrucción es bastante útil al trabajar con cantidades grandes de información; sin embargo, para realizar su trabajo consume gran cantidad de memoria del servidor.
Una experiencia que tuve es que al intentar cargar un archivo de más de 50k registros, el servidor tardo en procesar cerca de 5 min; al liberar memoria que consumían otras aplicaciones este mismo proceso demoro tan solo unos segundos.