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.

Archivo csv

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.

Tabla en SQL Server

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.

Bulk insert en SQL Server

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.

Podría interesarte Realizar un respaldo en SQL Server 2017  

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *