Compartir a través de


Usa un archivo de formato para asignar columnas de tabla a los campos Data-File (SQL Server)

Un archivo de datos puede contener campos organizados en un orden diferente de las columnas correspondientes de la tabla. En este tema se presentan los archivos de formato XML y no XML que se han modificado para dar cabida a un archivo de datos cuyos campos se organizan en un orden diferente de las columnas de la tabla. El archivo de formato modificado asigna los campos de datos a sus columnas de tabla correspondientes.

Nota:

Un archivo de formato no XML o un archivo de formato XML se puede usar para importar masivamente un archivo de datos en la tabla mediante un comando bcp, una instrucción BULK INSERT o una instrucción INSERT ... SELECT * FROM OPENROWSET(BULK...). Para obtener más información, vea Usar un archivo de formato para importar datos de forma masiva (SQL Server).

Tabla de ejemplo y archivo de datos

Los ejemplos de archivos de formato modificados de este tema se basan en la tabla y el archivo de datos siguientes.

Tabla de ejemplo

Los ejemplos de este tema requieren que se cree una tabla denominada myTestOrder en la base de datos de ejemplo AdventureWorks2012 bajo el esquema dbo. Para crear esta tabla, en el Editor de consultas de SQL Server Management Studio, ejecute el código siguiente:

USE AdventureWorks2012;  
GO  
CREATE TABLE myTestOrder   
   (  
   Col1 smallint,  
   Col2 nvarchar(50) ,  
   Col3 nvarchar(50) ,   
   Col4 nvarchar(50)   
   );  
GO  
  

Archivo de datos

El archivo de datos, myTestOrder-c.txt, contiene los siguientes registros:

DataField3,DataField2,1,DataField4  
DataField3,DataField2,1,DataField4  
DataField3,DataField2,1,DataField4  
  

Para importar datos de forma masiva desde myTestSkipCol2-c.dat en la myTestSkipCol tabla, el archivo de formato debe asignar el primer campo de datos a Col3, el segundo campo de datos a Col2, el tercer campo de datos a Col1y el cuarto campo de datos a Col4.

Usar un archivo de formato no XML

Puede cambiar el orden de una asignación de columna cambiando el valor de orden de la columna para indicar la posición del campo de datos correspondiente.

El siguiente archivo de formato no XML de ejemplo presenta un archivo de formato, myTestOrder.fmt, que asigna los campos de myTestOrder-c.txt a las columnas de la myTestOrder tabla. Para obtener información sobre cómo crear el archivo de datos y la tabla, vea "Tabla de ejemplo y archivo de datos", anteriormente en este tema. El archivo de formato usa el formato de datos de caracteres.

El archivo de formato contiene la siguiente información:

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

Nota:

Para obtener más información sobre el diseño de archivos de formato no XML, vea Archivos de formato no XML (SQL Server).

Ejemplo

En el ejemplo siguiente se usa una BULK INSERT instrucción para importar datos de forma masiva desde el myTestOrder-c.txt archivo de datos a la myTestOrder tabla de ejemplo mediante el myTestOrder.fmt archivo de formato no XML.

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

USE AdventureWorks2012;  
GO  
BULK INSERT myTestOrder  
FROM 'C:\myTestOrder-c.txt'   
WITH (formatfile='C:\myTestOrder.fmt');  
GO  
  

Usar un archivo de formato XML

El siguiente archivo de formato no XML de ejemplo presenta un archivo de formato, myTestOrder.xml, que asigna los campos de myTestOrder-c.txt a las columnas de la myTestOrder tabla Para obtener información sobre cómo crear el archivo de datos y la tabla, vea "Tabla de ejemplo y archivo de datos", anteriormente en este tema.

El myTestOrder.xml archivo de formato contiene 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="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>  
  <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="7"/>  
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>  
 </RECORD>  
 <ROW>  
  <COLUMN SOURCE="3" NAME="Col1" xsi:type="SQLSMALLINT"/>  
  <COLUMN SOURCE="2" NAME="Col2" xsi:type="SQLNVARCHAR"/>  
  <COLUMN SOURCE="1" NAME="Col3" xsi:type="SQLNVARCHAR"/>  
  <COLUMN SOURCE="4" NAME="Col4" xsi:type="SQLNVARCHAR"/>  
 </ROW>  
</BCPFORMAT>  
  

Nota:

Para obtener información sobre la sintaxis del esquema XML y ejemplos adicionales de archivos de formato XML, vea Archivos de formato XML (SQL Server).

Ejemplo

En el ejemplo siguiente se usa el OPENROWSET proveedor de conjuntos de filas masivas para importar datos del archivo de myTestOrder-c.txt datos en la myTestOrder tabla de ejemplo mediante el archivo de myTestOrder.xml formato XML. La INSERT... SELECT instrucción especifica la lista de columnas de la lista de selección.

En el Editor de consultas de SQL Server Management Studio, ejecute el código siguiente:

USE AdventureWorks2012;  
GO  
INSERT INTO myTestOrder   
  SELECT Col1, Col2, Col3, Col4  
      FROM  OPENROWSET(BULK  'C:\myTestOrder-c.txt',  
      FORMATFILE='C:\myTestOrder.Xml'    
       ) AS t1;  
GO  
  

Véase también

Usar un archivo de formato para omitir una columna de tabla (SQL Server)
Uso de un archivo de formato para omitir un campo de datos (SQL Server)