Usar un archivo de formato para importar datos de forma masiva

En este tema se describe cómo usar un archivo de formato en operaciones de importación masiva. El archivo de formato asigna los campos del archivo de datos a las columnas de la tabla. En SQL Server 2005 y versiones posteriores, puede usar un archivo de formato XML o no XML para importar datos de forma masiva al utilizar un comando bcp o un comando BULK INSERT o INSERT ... SELECT * FROM OPENROWSET(BULK...) de Transact-SQL.

Nota importanteImportante

Para que un archivo de formato trabaje con un archivo de datos de caracteres Unicode, todos los campos de entrada deben ser cadenas de texto Unicode (es decir, de tamaño fijo o cadenas Unicode terminadas en caracteres).

Nota

Si no está familiarizado con los archivos de formato, vea Descripción de los archivos de formato no XML y Descripción de los archivos de formato XML.

Opciones de los archivos de formato para los comandos de importación masiva

La siguiente tabla resume la opción de archivo de formato para cada uno de los comandos de importación masiva.

Comando de carga masiva

Opción de archivo de formato

BULK INSERT

FORMATFILE = 'format_file_path'

INSERT ... SELECT * FROM OPENROWSET(BULK...)

FORMATFILE = 'format_file_path'

bcpin

-fformat_file

Para obtener más información, vea bcp (utilidad), BULK INSERT (Transact-SQL) o OPENROWSET (Transact-SQL).

Nota

Para importar o exportar datos SQLXML de manera masiva, utilice uno de los siguientes tipos de datos en el archivo de formato: SQLCHAR o SQLVARYCHAR (los datos se envían en la página de códigos del cliente o en la página de códigos implícita en la intercalación), SQLNCHAR o SQLNVARCHAR (los datos se envían como Unicode), o SQLBINARY o SQLVARYBIN (los datos se envían sin ninguna conversión).

Ejemplos

Los ejemplos de esta sección muestran cómo usar los archivos de formato para importar datos de forma masiva mediante el comando bcp y las instrucciones BULK INSERT e INSERT ... SELECT * FROM OPENROWSET(BULK...) . Para poder ejecutar los ejemplos de importación masiva, debe crear una tabla, un archivo de datos y un archivo de formato de ejemplo.

Tabla de ejemplo

Los ejemplos requieren la creación de una tabla denominada myTestFormatFiles en la base de datos de ejemplo AdventureWorks2008R2 bajo el esquema dbo. Para crear esta tabla, en el Editor de consultas de SQL Server Management Studio, ejecute:

USE AdventureWorks2008R2;
GO
CREATE TABLE myTestFormatFiles (
   Col1 smallint,
   Col2 nvarchar(50),
   Col3 nvarchar(50),
   Col4 nvarchar(50)
   );
GO

Archivo de datos de ejemplo

Los ejemplos utilizan un archivo de datos de ejemplo, myTestFormatFiles-c.Dat, que contiene los siguientes registros. Para crear el archivo de datos, en el símbolo del sistema de Microsoft Windows, escriba:

10,Field2,Field3,Field4
15,Field2,Field3,Field4
46,Field2,Field3,Field4
58,Field2,Field3,Field4

Archivos de formato de ejemplo

Algunos ejemplos de esta sección utilizan un archivo de formato XML, myTestFormatFiles-f-x-c.Xml, mientras que otros ejemplos utilizan un archivo sin formato XML. Ambos archivos de formato utilizan formatos de datos de caracteres y un terminador de campo que no es el predeterminado (,).

Archivo de formato no XML de ejemplo

En el siguiente ejemplo se utiliza bcp para generar un archivo de formato XML a partir de la tabla myTestFormatFiles. El archivo myTestFormatFiles.Fmt incluye la siguiente información:

9.0
4
1       SQLCHAR       0       7       ","      1     Col1         ""
2       SQLCHAR       0       100     ","      2     Col2         SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       100     ","      3     Col3         SQL_Latin1_General_CP1_CI_AS
4       SQLCHAR       0       100     "\r\n"   4     Col4         SQL_Latin1_General_CP1_CI_AS

Para utilizar bcp con la opción format para crear este archivo de formato, en el símbolo de sistema de Windows, escriba:

bcp AdventureWorks2008R2..MyTestFormatFiles format nul -c -t, -f myTestFormatFiles.Fmt -T

Para obtener más información acerca de cómo crear un archivo de formato, vea Crear un archivo de formato.

Archivo de formato XML de ejemplo

En el siguiente ejemplo se utiliza bcp para generar un archivo de formato XML a partir de la tabla myTestFormatFiles. El archivo myTestFormatFiles.Xml incluye la siguiente información:

<?xml version="1.0"?>
<BCPFORMAT xmlns="https://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="Col1" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="Col3" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="Col4" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>

Para utilizar bcp con la opción format para crear este archivo de formato, en el símbolo de sistema de Windows, escriba:

bcp AdventureWorks2008R2..MyTestFormatFiles format nul -c -t, -x -f myTestFormatFiles.Xml -T

Usar bcp

El siguiente ejemplo usa bcp para importar datos de forma masiva desde el archivo de datos myTestFormatFiles-c.Dat en la tabla HumanResources.myTestFormatFiles de la base de datos de ejemplo AdventureWorks2008R2. Este ejemplo utiliza un archivo de formato XML, MyTestFormatFiles.Xml. El ejemplo elimina todas las filas existentes en la tabla antes de importar el archivo de datos.

En el símbolo del sistema de Windows, escriba:

bcp AdventureWorks2008R2..myTestFormatFiles in C:\myTestFormatFiles-c.Dat -f C:\myTestFormatFiles.Xml -T

Nota

Para obtener más información acerca de este comando, vea bcp (utilidad).

Usar BULK INSERT

El siguiente ejemplo usa BULK INSERT para importar datos de forma masiva desde el archivo de datos myTestFormatFiles-c.Dat a la tabla HumanResources.myTestFormatFiles de la base de datos de ejemplo AdventureWorks2008R2. Este ejemplo utiliza un archivo sin formato XML, MyTestFormatFiles.Fmt. El ejemplo elimina todas las filas existentes en la tabla antes de importar el archivo de datos.

En el Editor de consultas de SQL Server Management Studio, ejecute:

USE AdventureWorks2008R2;
GO
DELETE myTestFormatFiles;
GO
BULK INSERT myTestFormatFiles 
   FROM 'C:\myTestFormatFiles-c.Dat' 
   WITH (FORMATFILE = 'C:\myTestFormatFiles.Fmt');
GO
SELECT * FROM myTestFormatFiles;
GO

Nota

Para obtener más información acerca de esta instrucción, vea BULK INSERT (Transact-SQL).

Usar el proveedor de conjunto de filas bulk OPENROWSET

El siguiente ejemplo usa INSERT ... SELECT * FROM OPENROWSET(BULK...) para importar datos de forma masiva desde el archivo de datos myTestFormatFiles-c.Dat a la tabla HumanResources.myTestFormatFiles de la base de datos de ejemplo de AdventureWorks2008R2. Este ejemplo utiliza un archivo de formato XML, MyTestFormatFiles.Xml. El ejemplo elimina todas las filas existentes en la tabla antes de importar el archivo de datos.

En el Editor de consultas de SQL Server Management Studio, ejecute:

USE AdventureWorks2008R2;
DELETE myTestFormatFiles;
GO
INSERT INTO myTestFormatFiles
    SELECT *
      FROM  OPENROWSET(BULK  'C:\myTestFormatFiles-c.Dat',
      FORMATFILE='C:\myTestFormatFiles.Xml'     
      ) as t1 ;
GO
SELECT * FROM myTestFormatFiles;
GO

Cuando haya terminado de utilizar la tabla de ejemplo, puede eliminarse con la siguiente instrucción:

DROP TABLE myTestFormatFiles

Nota

Para obtener más información acerca de la cláusula OPENROWSET BULK, vea OPENROWSET (Transact-SQL).