Sentencia BULK INSERT en Transact SQL
BULK INSERT
es la sentencia DML que permite insertar registros en una tabla o vista desde un fichero externo, usualmente un fichero CSV.
La sintaxis es la siguiente:
BULK INSERT table
FROM rutaArchivo
WITH (OPTIONS)
Antes de realizar un BULK INSERT
debemos atender las siguientes consideraciones:
-
La ruta y nombre del fichero deben de especificarse correctamente en el
FROM
para que la sentencia pueda tener acceso a su contenido. -
El orden de los datos del fichero tendrá correlación a las columnas de la tabla o vista donde queremos insertar los registros. Esto pone de manifiesto la importancia de respetar la coherencia del número de columnas y el tipo de dato específico que pueden almacenar cada una.
-
El fichero ha de adaptarse a las restricciones implícitas con las que está definida la tabla o vista donde queremos realizar la inserción. Esto incluye campos con restricciones (
NOT NULL
, formatos explícitos) o campos con propiedad IDENTITY entre otras.
Parámetros
BULK INSERT permite añadir en la cláusula WITH
una sería de opciones configurables a la hora de cargar un fichero. En esta sección nos centraremos en explicar brevemente aquellas más destacables:
-
FIRSTROW: permite especificar la fila por donde empezarán a cargarse los datos. Esta opción nos permite omitir registros.
-
LASTROW: permite especificar la fila que marcará el límite de carga, limitando el número de registros que queremos insertar.
-
FORMAT: Opcional, nos permite especificar el tipo de fichero que vamos a cargar.
-
KEEPIDENTITY: nos permite romper la propiedad IDENTITY de algún campo para forzar al sistema a guardar un valor específico.
-
MAXERRORS: permite especificar el número de errores necesarios que ocurran durante el proceso antes de que se detenga la carga de datos.
-
FIELDTERMINATOR: Específica el signo del fichero que delimita cada valor correspondiente a cada columna en la vista o tabla donde deseamos insertar.
-
ROWTERMINATOR: Específica el signo del fichero que delimita el fin de cada fila correspondiente a cada registro en la vista o tabla donde deseamos insertar.
Ejemplo
Para ilustrar el funcionamiento de la sentencia BULK INSERT
, procedemos a utilizar de ejemplo el siguiente fichero CSV que hemos generado: bulkInsert.csv, cuyo contendido es el siguiente:
9;Paula;Jerez Castro;C/ Olivar 44;123777898
10;Jorge;Luso Otero;C/ General Aranaz 76;556814332
Queremos, por tanto, introducir estos nuevos valores a en la tabla Clientes
. Para ello dejamos el script de ejecución:
BULK INSERT Clientes
FROM
'C:\Users\user\Desktop\WEB\bulkInsert.csv'
WITH (
FORMAT = 'CSV',
FIELDTERMINATOR= ';',
ROWTERMINATOR = '\n',
KEEPIDENTITY,
MAXERRORS = 2
);
Como nuestra tabla Clientes
está definida con una propiedad IDENTITY auto incremental 1 a 1 para el campo idClientes
, necesitamos utilizar la opción KEEPIDENTITY
para romper dicha propiedad y poder insertar los valores definidos en el fichero.
Una vez ejecutada la sentencia, comprobamos que los registros se han insertado correctamente en la tabla Clientes
:
SELECT idClientes,
nombre,
apellidos,
direccion,
cuenta
FROM Clientes
WHERE idClientes IN (9,10);
idClientes | nombre | apellidos | direccion | cuenta |
---|---|---|---|---|
9 | Paula | Jerez Castro | C/ Olivar 44 | 123777898 |
10 | Jorge | Luso Otero | C/ General Aranaz 76 | 556814332 |