Introducción a los archivos de formato

Actualizado: 17 de julio de 2006

Un archivo que se utiliza para almacenar información de formato para cada campo de un archivo de datos de una tabla específica se denomina archivo de formato. Un archivo de formato proporciona toda la información de formato necesaria para la exportación o importación masiva de datos. El archivo de formato proporciona una manera flexible de escribir archivos de datos que requiere poca o ninguna modificación para adaptarlos a otros formatos de datos y para leer archivos de datos de otros programas.

En Microsoft SQL Server 2000 y versiones anteriores, la exportación y la importación masivas funcionan con un solo tipo de archivo de formato. Esta función aún es compatible con Microsoft SQL Server 2005. Sin embargo, SQL Server 2005 también es compatible con archivos de formato XML como alternativa. Los archivos de formato del tipo original se conocen como archivos de formato no XML.

Todos los archivos de formato contienen descripciones de todos los campos de un archivo de datos. Los archivos de formato XML también incluyen descripciones de las columnas de tabla correspondientes. Por lo general, los archivos de formato XML y no XML son intercambiables. Sin embargo, es recomendable utilizar la sintaxis XML para los nuevos archivos de formato porque proporciona varias ventajas con relación a los archivos de formato no XML. Un archivo de formato XML tiene las siguientes características:

  • Es autodescriptivo y fácil de leer, crear y ampliar.
  • Contiene los tipos de datos de las columnas de destino.
    Esta característica permite la separación entre la representación de los datos en el archivo de datos y el tipo de datos asociado a cada campo del archivo. Por ejemplo, si un archivo de datos contiene una representación de caracteres de los datos, se perderá el tipo de columna SQL correspondiente.
    El comando bcp y la instrucción BULK INSERT utilizan las columnas de la tabla de destino para realizar la conversión de tipos. Esto hace que sea necesaria una tabla de destino. Por el contrario, la función OPENROWSET(BULK...) se basa en un archivo de formato XML para leer datos de un archivo de datos. Esto hace que una tabla de destino sea opcional.
  • Permite cargar un campo que contenga un único tipo de datos de objeto grande (LOB) desde un archivo de datos.

Para obtener información acerca del diseño de cada tipo de archivo de formato, vea la sección "Ejemplos" más adelante en este tema.

¿Cuándo se necesita un archivo de formato?

La instrucción INSERT ... SELECT * FROM OPENROWSET(BULK...) requiere siempre un archivo de formato.

Para bcp o BULK INSERT, en situaciones simples, el uso de un archivo de formato es opcional y pocas veces necesario. Sin embargo, en situaciones de importación masiva complejas, el archivo de formato suele ser necesario. Por ejemplo, al importar datos de un archivo de datos a una tabla, las siguientes situaciones pueden requerir el empleo de archivos de formato:

  • El usuario no dispone de permisos INSERT en algunas columnas de la tabla de destino.
  • Se utiliza el mismo archivo de datos como origen de varias tablas que tienen esquemas distintos.
  • Las columnas del archivo de datos están ordenadas de forma distinta a como lo están en la tabla de destino.
  • Los elementos de datos del archivo de datos tienen caracteres de terminación o longitudes de prefijo distintos.

Los archivos de formato se necesitan cuando:

  • El archivo de datos tiene un número de campos distinto al de columnas de la tabla de destino; por ejemplo:
    • La tabla de destino contiene como mínimo una columna para la que se ha definido un valor predeterminado o se admite un valor NULL.
    • Los usuarios no tienen permisos SELECT/INSERT en una o más columnas de la tabla.
    • Se utiliza un único archivo de datos con dos o más tablas que tienen esquemas distintos.
  • El orden de columnas del archivo de datos y de la tabla es distinto.
  • Los caracteres de terminación o las longitudes de prefijo no coinciden entre las columnas del archivo de datos.

[!NOTA] En caso de no disponer de ningún archivo de formato, si un comando bcp especifica un modificador de formato de datos (-n, -c, -w o -N) o una operación BULK INSERT especifica la opción DATAFILETYPE, se utilizará el formato de datos especificado como método predeterminado para interpretar los campos del archivo de datos.

Ejemplos

Los siguientes ejemplos muestran el diseño de un archivo de formato no XML y de un archivo de formato XML. Estos archivos de formato corresponden a la tabla HumanResources.myTeam de la base de datos de ejemplo AdventureWorks. Esta tabla contiene cuatro columnas: EmployeeID, Name, Title y ModifiedDate.

[!NOTA] Para obtener más información acerca de esta tabla y cómo crearla, vea Crear la tabla HumanResources.myTeam.

A. Uso de un archivo de formato no XML

El siguiente archivo de formato no XML usa el formato de datos nativo de SQL Server para la tabla HumanResources.myTeam. Este formato se creó usando el siguiente comando bcp.

bcp AdventureWorks.HumanResources.myTeam format nul -f myTeam.Fmt -n -T 
The contents of this format file are as follows: 9.0
4
1       SQLSMALLINT   0       2       ""   1     EmployeeID               ""
2       SQLNCHAR      2       100     ""   2     Name                     SQL_Latin1_General_CP1_CI_AS
3       SQLNCHAR      2       100     ""   3     Title                    SQL_Latin1_General_CP1_CI_AS
4       SQLNCHAR      2       100     ""   4     Background               SQL_Latin1_General_CP1_CI_AS

Para obtener más información, vea Descripción de los archivos de formato no XML.

B. Uso de un archivo de formato XML

El siguiente archivo de formato XML usa el formato de datos nativo de SQL Server para la tabla HumanResources.myTeam. Este formato se creó usando el siguiente comando bcp.

bcp AdventureWorks.HumanResources.myTeam format nul -f myTeam.Xml -x -n -T 

El archivo de formato contiene:

 <?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="NativePrefix" LENGTH="1"/>
  <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="NCharPrefix" PREFIX_LENGTH="2" MAX_LENGTH="100" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="EmployeeID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="Name" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="Title" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="Background" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>

Para obtener más información, vea Descripción de los archivos de formato XML.

Vea también

Conceptos

Trabajar con archivos de formato

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

17 de julio de 2006

Contenido modificado: