En muchas ocasiones tenemos un documento excel, csv, etc… repleto de información que nos interesa maquetar en inserts para cargas masivas de datos. En este documento se muestra como leer, maquetar y generar un txt con las sentencias de insercción usando Batch con los datos en un csv limitado con ;’.
CSV
Supongamos que tenemos un csv con dos columnas y con cabecera. Las dos columnas son:
- numero: Con numeros
- texto: Con texto
Ejemplo:
numero;texto
001;hola
034;wikicode
023;adios
076;carga
032;masiva
Insert
El formato del insert será el siguiente:
INSERT INTO mi_tabla (contador, numero, texto) VALUES (x,y,z); |
Donde x,y,z son:
y y z: Se alimentarán de las columnas del csv
x: Es un contador que debemos incrementar nosotros (no la base de datos)
Carga masiva batch
Este es el fichero batch, para que funcione debe existir un archivo info.csv en la misma carpeta donde se ejecuta.
@echo off ::Elimina el script anterior del script.txt CLS set /a contador=0 set /a porcentaje=0 set /a total=0 ::Primera cabecera ECHO Preparando archivo... ::Recorre el csv llamando a countCSV para cada linea ignorando la cabecera for /f "skip=1 tokens=1-2 delims=;" %%a in (info.csv) do call :countCSV "%%a" "%%b" ::Recorre el csv llamando a WriteCSV para cada linea ignorando la cabecera for /f "skip=1 tokens=1-2 delims=;" %%a in (info.csv) do call :WriteCVS "%%a" "%%b" ::Manda al final santandose el WriteCVS GOTO Done ::Funcion que maqueta y guarda el insert :WriteCVS call:incrContador ECHO insert into mi_tabla (contador, numero, texto) values (%contador%,%~1,'%~2');>>script.txt set /a porcentaje=(%contador%*100)/%total% cls ECHO Creando... %porcentaje%%% GOTO EOF ::Funcion que incrementa :incrContador set /a contador+=1 GOTO EOF ::Funcion que cuenta para % :countCSV set /a total=%total%+1 GOTO EOF ::Al terminar añade un commit :Done ECHO commit;>>script.txt PAUSE :EOF |