Vamos a ver un ejemplo para poder insertar datos de forma masiva en una tabla de SQLSERVER.
El método consiste en tener dos ficheros:
- Un fichero *.xml que define la estructura de la tabla
- Un fichero *.txt que tiene los datos de la tabla
Pues bien. La construcción del fichero de estructura quedaría tal que así:
La estructura es común para cualquier tabla. Basta con añadir un nodo Field junto con un Column por cada campo que queramos mas.
En la parte FIELD el atributo TERMINATOR: especifican el caracter o caracteres que se usaran para diferenciar que termina el dato de un campo y comienza el del siguiente. Nosotros hemos decidido usar siempre el mismo a expceción de fin de registro. Para validar los datos con mayor certeza.
"VARIOS.XML"
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="|}@" COLLATION="Modern_Spanish_CI_AS" />
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="|}@" COLLATION="Modern_Spanish_CI_AS" />
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="|}@" COLLATION="Modern_Spanish_CI_AS" />
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="|}@#" COLLATION="Modern_Spanish_CI_AS" />
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="GRUPO" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="2" NAME="CODIGO" xsi:type="SQLINT"/>
<COLUMN SOURCE="3" NAME="ULTIMAMODIFICACION" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="DESCRIPCION" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>
El fichero "VARIOS.TXT" quedaría algo tal que así:
8|}@1|}@30/03/2009 18:34:16|}@Comp. ALTO (Perfil)|}@#8|}@2|}@30/03/2009 18:34:16|}@Comp. ANCHO (Perfil)|}@#8|}@3|}@30/03/2009 18:34:16|}@Comp. ALTO x ANCHO (Cristal)|}@#8|}@4|}@30/03/2009 18:34:16|}@Comp. PREMARCO (Premarco)|}@#8|}@5|}@30/03/2009 18:34:16|}@Hierros|}@#1|}@1|}@30/03/2009 18:34:16|}@2|}@#14|}@1|}@20/08/2012 21:27:00|}@EL POZO CARNE|}@#14|}@2|}@20/08/2012 21:27:00|}@EL POZO CHARCUTERIA|}@#
Una vez tenemos los dos ficheros preparados lanzamos la consulta con la siguiente estructura sobre la bd:
INSERT INTO NOMBRE_BASE_DATOS.dbo.NOMBRE_TABLA (GRUPO, CODIGO, ULTIMAMODIFICACION, DESCRIPCION) SELECT GRUPO, CODIGO, ULTIMAMODIFICACION, DESCRIPCION FROM OPENROWSET(BULK 'C:\Varios.txt', FORMATFILE= 'C:\varios.Xml') as T1
Con esto hemos conseguido insertar todos los datos de un fichero *.CSV en una tabla de SQLSERVER
Suscribirse a:
Enviar comentarios (Atom)
Jesús Moreno - Ingeniero Ténico Informático - consultor Informático
Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...
-
Ultima hora: Máxima difusión, aquí la sentencia del Tribunal Supremo sobre la Clausula Suelo . http://s01.s3c.es/imag/doc/ 2013-06-04/pg.4...
-
El ejemplo se ha probado en una base de datos Microsoft SQL Server 2008 R2 CREATE FUNCTION dbo . udf_GetNumeric (@ strAlphaNumeric VARCHA...
-
Al intentar compartir la impresora nos lanza un error que dice: " No se pudo guardar la configuración de la impresora. No hay no hay m...
No hay comentarios:
Publicar un comentario