Archivos de formato XML de ejemplo

Los ejemplos de este tema muestran los aspectos clave del uso de archivos de formato XML. La sintaxis de un archivo de formato es independiente de la dirección de la operación; es decir, la sintaxis es la misma para exportaciones e importaciones masivas.

Los ejemplos muestran lo siguiente:

  • Ordenar campos de datos de caracteres igual que columnas de tabla

  • Ordenar campos de datos y columnas de tabla de forma diferente

  • Omitir un campo de datos

  • Asignar tipos diferentes de campos a columnas

  • Asignar datos XML a una tabla

  • Importar campos de longitud fija o de ancho fijo

Nota

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

Ejemplos

En los archivos de datos que se muestran en los ejemplos siguientes, <tab> indica un carácter de tabulación en un archivo de datos, y <return> indica un retorno de carro.

A. Ordenar campos de datos de caracteres igual que columnas de tabla

En el ejemplo siguiente se muestra un archivo de formato XML que describe un archivo de datos que contiene tres campos de datos de caracteres. El archivo de formato asigna el archivo de datos a una tabla que contiene tres columnas. Los campos de datos se corresponden uno a uno con las columnas de la tabla.

Tabla (fila): Person (Age int, FirstName varchar(20), LastName varchar(30))

Archivo de datos (registro): Age<tab>Firstname<tab>Lastname<return>

El siguiente archivo de formato XML lee del archivo de datos a la tabla.

En el elemento <RECORD>, el archivo de formato representa los valores de datos de los tres campos como datos de caracteres. Para cada campo, el atributo TERMINATOR indica el terminador que sigue al valor de datos.

Los campos de datos se corresponden uno a uno con las columnas de la tabla. En el elemento <ROW>, el archivo de formato asigna la columna Age al primer campo, la columna FirstName al segundo campo y la columna LastName al tercer campo.

<?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="\t" 
      MAX_LENGTH="12"/> 
    <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" 
      MAX_LENGTH="20" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" 
      MAX_LENGTH="30" 
      COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT"/>
    <COLUMN SOURCE="2" NAME="firstname" xsi:type="SQLVARYCHAR"/>
    <COLUMN SOURCE="3" NAME="lastname" xsi:type="SQLVARYCHAR"/>
  </ROW>
</BCPFORMAT>

Nota

Para ver un ejemplo equivalente en AdventureWorks2008R2, vea Crear un archivo de formato.

B. Ordenar campos de datos y columnas de tabla de forma diferente

En el ejemplo siguiente se muestra un archivo de formato XML que describe un archivo de datos que contiene tres campos de datos de caracteres. El archivo de formato asigna el archivo de datos a una tabla que contiene tres columnas que están ordenadas de forma diferente a los campos del archivo de datos.

Tabla (fila): Person (Age int, FirstName varchar(20), LastName varchar(30))

Archivo de datos (registro): Age<tab>Lastname<tab>Firstname<return>

En el elemento <RECORD>, el archivo de formato representa los valores de datos de los tres campos como datos de caracteres.

En el elemento <ROW>, el archivo de formato asigna la columna Age al primer campo, la columna FirstName al tercer campo y la columna LastName al segundo campo.

<?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="\t" 
      MAX_LENGTH="12"/>
    <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="20" 
      COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" 
      MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT"/>
    <COLUMN SOURCE="3" NAME="firstname" xsi:type="SQLVARYCHAR"/>
    <COLUMN SOURCE="2" NAME="lastname" xsi:type="SQLVARYCHAR"/>
  </ROW>
</BCPFORMAT>

Nota

Para ver un ejemplo equivalente en AdventureWorks2008R2, vea Usar un archivo de formato para asignar columnas de tabla a campos de un archivo de datos.

C. Omitir un campo de datos

En el ejemplo siguiente se muestra un archivo de formato XML que describe un archivo de datos que contiene cuatro campos de datos de caracteres. El archivo de formato asigna el archivo de datos a una tabla que contiene tres columnas. El segundo campo de datos no se corresponde con ninguna columna de la tabla.

Tabla (fila): Person (Age int, FirstName Varchar(20), LastName Varchar(30))

Archivo de datos (registro): Age<tab>employeeID<tab>Firstname<tab>Lastname<return>

En el elemento <RECORD>, el archivo de formato representa los valores de datos de los cuatro campos como datos de caracteres. Para cada campo, el atributo TERMINATOR indica el terminador que sigue al valor de datos.

En el elemento <ROW>, el archivo de formato asigna la columna Age al primer campo, la columna FirstName al tercer campo y la columna LastName al cuarto campo.

<?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="\t" 
      MAX_LENGTH="12"/>
    <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" 
      MAX_LENGTH="10" 
      COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\t" 
      MAX_LENGTH="20" 
      COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" 
      MAX_LENGTH="30" 
      COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="age" xsi:type="SQLINT"/>
    <COLUMN SOURCE="3" NAME="firstname" xsi:type="SQLVARYCHAR"/>
    <COLUMN SOURCE="4" NAME="lastname" xsi:type="SQLVARYCHAR"/>
  </ROW>
</BCPFORMAT>

Nota

Para ver un ejemplo equivalente en AdventureWorks2008R2, vea Usar un archivo de formato para omitir un campo de datos.

D. Asignar <FIELD> xsi:type a <COLUMN> xsi:type

En el ejemplo siguiente se muestran tipos de campos diferentes y sus asignaciones a columnas.

<?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 xsi:type="CharTerm" ID="C1" TERMINATOR="\t" 
            MAX_LENGTH="4"/>
      <FIELD xsi:type="CharFixed" ID="C2" LENGTH="10" 
         COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS"/>
      <FIELD xsi:type="CharPrefix" ID="C3" PREFIX_LENGTH="2" 
         MAX_LENGTH="32" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS"/>
      <FIELD xsi:type="NCharTerm" ID="C4" TERMINATOR="\t" 
         MAX_LENGTH="4"/>
      <FIELD xsi:type="NCharFixed" ID="C5" LENGTH="10" 
         COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS"/>
      <FIELD xsi:type="NCharPrefix" ID="C6" PREFIX_LENGTH="2" 
         MAX_LENGTH="32" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS"/>
      <FIELD xsi:type="NativeFixed" ID="C7" LENGTH="4"/>
   </RECORD>
   <ROW>
      <COLUMN SOURCE="C1" NAME="Age" xsi:type="SQLTINYINT"/>
      <COLUMN SOURCE="C2" NAME="FirstName" xsi:type="SQLVARYCHAR" 
      LENGTH="16" NULLABLE="NO"/>
      <COLUMN SOURCE="C3" NAME="LastName" />
      <COLUMN SOURCE="C4" NAME="Salary" xsi:type="SQLMONEY"/>
      <COLUMN SOURCE="C5" NAME="Picture" xsi:type="SQLIMAGE"/>
      <COLUMN SOURCE="C6" NAME="Bio" xsi:type="SQLTEXT"/>
      <COLUMN SOURCE="C7" NAME="Interest"xsi:type="SQLDECIMAL" 
      PRECISION="5" SCALE="3"/>
   </ROW>
</BCPFORMAT>

E. Asignar datos XML a una tabla

En el ejemplo siguiente se crea una tabla vacía de dos columnas (t_xml), en la que la primera columna se asigna al tipo de datos int y la segunda columna se asigna al tipo de datos xml.

CREATE TABLE t_xml (c1 int, c2 xml)

El siguiente archivo de formato XML carga un archivo de datos en una tabla t_xml.

<?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" PREFIX_LENGTH="1"/>
  <FIELD ID="2" xsi:type="NCharPrefix" PREFIX_LENGTH="8"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="c1" xsi:type="SQLINT"/>
  <COLUMN SOURCE="2" NAME="c2" xsi:type="SQLNCHAR"/>
 </ROW>
</BCPFORMAT>

F. Importar campos de longitud fija o de ancho fijo

En el siguiente ejemplo se describen campos fijos de 10 o 6 caracteres cada uno. El archivo de formato representa estas longitudes y anchos de campo como LENGTH="10" y LENGTH="6", respectivamente. Cada fila de los archivos de datos termina con una combinación de retorno de carro y avance de línea, {CR}{LF}, que el archivo de formato representa como TERMINATOR="\r\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="CharFixed" LENGTH="10"/>
    <FIELD ID="2" xsi:type="CharFixed" LENGTH="6"/>
    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n"
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="C1" xsi:type="SQLINT" />
    <COLUMN SOURCE="2" NAME="C2" xsi:type="SQLINT" />
  </ROW>
</BCPFORMAT>