XML, archivos de formato (SQL Server)XML Format Files (SQL Server)

SQL Server 2017SQL Server 2017 proporciona un esquema XML que define la sintaxis para escribir archivos de formato XML que se usarán para la importación masiva de datos en una tabla de SQL ServerSQL Server . table. Los archivos de formato XML deben adherirse a este esquema, que se define en el lenguaje de definición de esquemas XML (XSDL).XML format files must adhere to this schema, which is defined in the XML Schema Definition Language (XSDL). Los archivos con formato XML solamente se admiten cuando se instalan herramientas de SQL ServerSQL Server con SQL ServerSQL Server Native Client.XML format files are only supported when SQL ServerSQL Server tools are installed together with SQL ServerSQL Server Native Client.

Puede usar un archivo de formato XML con un comando bcp, una instrucción BULK INSERT o una instrucción INSERT... Instrucción SELECT * FROM OPENROWSET(BULK...).You can use an XML format file with a bcp command, BULK INSERT statement, or INSERT ... SELECT * FROM OPENROWSET(BULK...) statement. El comando bcp permite generar automáticamente un archivo de formato XML para una tabla; para más información, consulte bcp Utility.The bcp command allows you to automatically generate an XML format file for a table; for more information, see bcp Utility.

Nota

Se admiten dos tipos de archivos de formato para la importación y exportación masivas: archivos de formato no XML y archivos de formato XML.Two types of format files are supported for bulk exporting and importing: non-XML format files and XML format files. Los archivos de formato XML proporcionan una alternativa flexible y eficaz a los archivos de formato no XML.XML format files provide a flexible and powerful alternative to non-XML format files. Para obtener información sobre los archivos de formato no XML, vea Archivos de formato no XML (SQL Server).For information about non-XML format files, see Non-XML Format Files (SQL Server).

En este tema:In This Topic:

Ventajas de los archivos de formato XML Benefits of XML Format Files

  • Los archivos de formato XML son autodescriptivos, lo que facilita su lectura, creación y ampliación.XML format files are self-describing, making them easy to read, create, and extend. Los usuarios pueden leerlos, lo que facilita la comprensión del modo en que se interpretan los datos durante las operaciones masivas.They are human readable, making it easy to understand how data is interpreted during bulk operations.

  • Los archivos de formato XML contienen los tipos de datos de las columnas de destino.XML format files contain the data types of target columns. La codificación XML describe claramente los tipos de datos y elementos de datos del archivo de datos, así como la asignación entre los elementos de datos y las columnas de las tablas.The XML encoding clearly describes the data types and data elements of the data file and also the mapping between data elements and table columns.

    Esta característica habilita 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.This enables separation between how data is represented in the data file and what data type is associated with each field in the file. Por ejemplo, si un archivo de datos contiene una representación de caracteres de los datos, se perderá el tipo de columna SQL correspondiente.For example, if a data file contains a character representation of the data, the corresponding SQL column type is lost.

  • Un archivo de formato XML permite cargar un campo que contenga un único tipo de datos de objeto grande (LOB) desde un archivo de datos.An XML format file allows for loading of a field that contains a single large object (LOB) data type from a data file.

  • Un archivo de formato XML puede mejorarse manteniendo su compatibilidad con sus versiones anteriores.An XML format file can be enhanced yet remain compatible with its earlier versions. Además, la claridad de la codificación XML facilita la creación de varios archivos de formato para un determinado archivo de datos.Furthermore, the clarity of XML encoding facilitates the creation of multiple format files for a given data file. Esto es útil si tiene que asignar todos o algunos campos de datos a columnas de diferentes tablas o vistas.This is useful if you have to map all or some of the data fields to columns in different tables or views.

  • La sintaxis XML es independiente de la dirección de la operación; es decir, la sintaxis es la misma para exportaciones e importaciones masivas.The XML syntax is independent of the direction of the operation; that is, the syntax is the same for bulk export and bulk import.

  • Puede usar los archivos de formato XML para importar los datos de forma masiva en tablas o vistas sin particiones y para exportar los datos de forma masiva.You can use XML format files to bulk import data into tables or non-partitioned views and to bulk export data.

  • Para OPENROWSET(BULK…) la función que especifica una tabla de destino es opcional.For the OPENROWSET(BULK...) function specifying a target table is optional. Esto se debe a que la función se basa en el archivo de formato XML para leer datos de un archivo de datos.This is because the function relies on the XML format file to read data from a data file.

    Nota

    Es necesaria una tabla de destino con el comando bcp y la instrucción BULK INSERT, que usa las columnas de la tabla de destino para realizar la conversión de tipos.A target table is necessary with the bcp command and the BULK INSERT statement, which uses the target table columns to do the type conversion.

Estructura de los archivos de formato XML Structure of XML Format Files

Al igual que un archivo de formato no XML, un archivo de formato XML define el formato y la estructura de los campos de datos de un archivo de datos y asigna dichos campos a columnas de una sola tabla de destino.Like a non-XML format file, an XML format file defines the format and structure of the data fields in a data file and maps those data fields to columns in a single target table.

Un archivo de formato XML posee dos componentes principales, <RECORD> y <ROW>:An XML format file possesses two main components, <RECORD> and <ROW>:

  • <RECORD> describe los datos tal como se almacenan en el archivo de datos.<RECORD> describes the data as it is stored in the data file.

    Cada elemento <RECORD> contiene un conjunto de uno o más elementos <FIELD>.Each <RECORD> element contains a set of one or more <FIELD> elements. Dichos elementos corresponden a los campos del archivo de datos.These elements correspond to fields in the data file. La sintaxis básica es la siguiente:The basic syntax is as follows:

    <RECORD><RECORD>

    <FIELD .../> [ ...n ]<FIELD .../> [ ...n ]

    </RECORD></RECORD>

    Cada elemento <FIELD> describe el contenido de un determinado campo de datos.Each <FIELD> element describes the contents of a specific data field. Un campo solo puede asignarse a una columna de la tabla.A field can only be mapped to one column in the table. No es necesario asignar todos los campos a columnas.Not all fields need to be mapped to columns.

    Un campo de un archivo de datos puede tener una longitud fija o variable, o bien terminar mediante un carácter.A field in a data file can be either of fixed/variable length or character terminated. Un valor de campo puede representarse como: un carácter (mediante una representación de un solo byte), un carácter ancho (mediante la representación Unicode de dos bytes), un formato de base de datos nativo o un nombre de archivo.A field value can be represented as: a character (using single-byte representation), a wide character (using Unicode two-byte representation), native database format, or a file name. Si un valor de campo se representa como un nombre de archivo, éste apunta al archivo que contiene el valor de una columna BLOB en la tabla de destino.If a field value is represented as a file name, the file name points to the file that contains the value of a BLOB column in the target table.

  • <ROW> describe el modo de construir filas de datos a partir de un archivo de datos cuando los datos del archivo se importan en una tabla de SQL ServerSQL Server.<ROW> describes how to construct data rows from a data file when the data from the file is imported into a SQL ServerSQL Server table.

    Un elemento <ROW> contiene un conjunto de elementos <COLUMN>.A <ROW> element contains a set of <COLUMN> elements. Estos elementos corresponden a las columnas de la tabla.These elements correspond to table columns. La sintaxis básica es la siguiente:The basic syntax is as follows:

    <ROW><ROW>

    <COLUMN .../> [ ...n ]<COLUMN .../> [ ...n ]

    </ROW></ROW>

    Cada elemento <COLUMN> puede asignarse únicamente a un campo del archivo de datos.Each <COLUMN> element can be mapped to only one field in the data file. El orden de los elementos <COLUMN> del elemento <ROW> define el orden en el que la operación masiva los devuelve.The order of the <COLUMN> elements in the <ROW> element defines the order in which they are returned by the bulk operation. El archivo de formato XML asigna a cada elemento <COLUMN> un nombre local que no tiene ninguna relación con la columna de la tabla de destino de una operación de importación en bloque.The XML format file assigns each <COLUMN> element a local name that has no relationship to the column in the target table of a bulk import operation.

Sintaxis de esquema para archivos de formato XML Schema Syntax for XML Format Files

Esta sección contiene un resumen de los elementos y atributos del esquema XML para archivos de formato XML.This section contains a summary of the elements and attributes of the XML schema for XML format files. 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.The syntax of a format file is independent of the direction of the operation; that is, the syntax is the same for bulk export and bulk import. En esta sección también se trata cómo la importación en bloque usa los elementos <ROW> y <COLUMN> y cómo colocar el valor xsi:type de un elemento en un conjunto de datos.This section also considers how bulk import uses the <ROW> and <COLUMN> elements and how to put the xsi:type value of an element into a data set.

Para ver cómo la sintaxis corresponde a los archivos de formato XML reales, vea Archivos de formato XML de ejemplo, más adelante en este tema.To see how the syntax corresponds to actual XML format files, see Sample XML Format Files, later in this topic.

Nota

Puede modificar un archivo de formato de forma que le permita importar de forma masiva desde un archivo de datos en el que el número y/o el orden de los campos difieren del número y/o el orden de las columnas de la tabla.You can modify a format file to let you bulk import from a data file in which the number and/or order of the fields differ from the number and/or order of table columns. Para obtener más información, vea Archivos de formato para importar o exportar datos (SQL Server).For more information, see Format Files for Importing or Exporting Data (SQL Server).

En esta sección:In This Section:

Sintaxis básica del esquema XML Basic Syntax of the XML Schema

Las instrucciones de esta sintaxis muestran solo los elementos (<BCPFORMAT>, <RECORD>, <FIELD>, <ROW> y <COLUMN>) y sus atributos básicos.This syntax statements show only the elements (<BCPFORMAT>, <RECORD>, <FIELD>, <ROW>, and <COLUMN>) and their basic attributes.

<BCPFORMAT ...><BCPFORMAT ...>

<RECORD><RECORD>

<FIELD ID = "fieldID" xsi:type = "fieldType" [...]<FIELD ID = "fieldID" xsi:type = "fieldType" [...]

/>

</RECORD></RECORD>

<ROW><ROW>

<COLUMN SOURCE = "fieldID" NAME = "columnName" xsi:type = "columnType" [...]<COLUMN SOURCE = "fieldID" NAME = "columnName" xsi:type = "columnType" [...]

/>

</ROW></ROW>

</BCPFORMAT></BCPFORMAT>

Nota

Los atributos adicionales asociados al valor de xsi:type en un elemento <FIELD> o <COLUMN> se describen más adelante en este tema.Additional attributes that are associated with the value of the xsi:type in a <FIELD> or <COLUMN> element are described later in this topic.

En esta sección:In This Section:

Elementos de esquema Schema Elements

En esta sección se resume la finalidad de cada elemento que define el esquema XML para los archivos de formato XML.This section summarizes the purpose of each element that the XML schema defines for XML format files. Los atributos se describen más adelante, en otras secciones de este tema.The attributes are described in separate sections later in this topic.

<BCPFORMAT ><BCPFORMAT>
Es el elemento de archivo de formato que define la estructura de los registros de un determinado archivo de datos y su correspondencia con las columnas de una fila de tabla en la tabla.Is the format-file element that defines the record structure of a given data file and its correspondence to the columns of a table row in the table.

<RECORD .../><RECORD .../>
Define un elemento complejo que contiene uno o más elementos <FIELD>.Defines a complex element containing one or more <FIELD> elements. El orden en que se declaran los campos en el archivo de formato es el orden en que estos campos aparecen en el archivo de datos.The order in which the fields are declared in the format file is the order in which those fields appear in the data file.

<FIELD .../><FIELD .../>
Define un campo del archivo de datos que contiene datos.Defines a field in data file, which contains data.

Los atributos de este elemento se tratan en la sección Atributos del elemento <FIELD> más adelante en este tema.The attributes of this element are discussed in Attributes of the <FIELD> Element, later in this topic.

<ROW .../><ROW .../>
Define un elemento complejo que contiene uno o más elementos <COLUMN>.Defines a complex element containing one or more <COLUMN> elements. El orden de los elementos <COLUMN> es independiente del orden de los elementos <FIELD> de una definición RECORD.The order of the <COLUMN> elements is independent of the order of <FIELD> elements in a RECORD definition. Más bien, el orden de los elementos <COLUMN> de un archivo de formato determina el orden de las columnas del conjunto de filas resultante.Rather, the order of the <COLUMN> elements in a format file determines the column order of the resultant rowset. Los campos de datos se cargan en el orden en que los elementos <COLUMN> correspondientes se declaran en el elemento <COLUMN>.Data fields are loaded in the order in which the corresponding <COLUMN> elements are declared in the <COLUMN> element.

Para obtener más información, consulte la sección Cómo usa la importación en bloque el elemento <ROW> más adelante en este tema.For more information, see How Bulk Import Uses the <ROW> Element, later in this topic.

<COLUMN><COLUMN>
Define una columna como elemento (<COLUMN>).Defines a column as an element (<COLUMN>). Cada elemento <COLUMN> corresponde a un elemento <FIELD> (cuyo identificador se especifica en el atributo SOURCE del elemento <COLUMN>).Each <COLUMN> element corresponds to a <FIELD> element (whose ID is specified in the SOURCE attribute of the <COLUMN> element).

Los atributos de este elemento se tratan en la sección Atributos del elemento <COLUMN> más adelante en este tema.The attributes of this element are discussed in Attributes of the <COLUMN> Element, later in this topic. Consulte también Cómo usa la importación en bloque el elemento <COLUMN> más adelante en este tema.Also see, How Bulk Import Uses the <COLUMN> Element, later in this topic.

</BCPFORMAT></BCPFORMAT>
Obligatorio para finalizar el archivo de formato.Required to end the format file.

Atributos del elemento <FIELD> Attributes of the <FIELD> Element

En esta sección se describen los atributos del elemento <FIELD>, que se resumen en la sintaxis de esquema siguiente:This section describes the attributes of the <FIELD> element, which are summarized in the following schema syntax:

<FIELD<FIELD

ID ="fieldID"ID ="fieldID"

xsi:type ="fieldType"xsi:type ="fieldType"

[ LENGTH ="n" ][ LENGTH ="n" ]

[ PREFIX_LENGTH ="p" ][ PREFIX_LENGTH ="p" ]

[ MAX_LENGTH ="m" ][ MAX_LENGTH ="m" ]

[ COLLATION ="collationName" ][ COLLATION ="collationName" ]

[ TERMINATOR ="terminator" ][ TERMINATOR ="terminator" ]

/>

Cada elemento <FIELD> es independiente de los demás.Each <FIELD> element is independent of the others. Un campo se describe según los atributos siguientes:A field is described in terms of the following attributes:

Atributo de FIELDFIELD Attribute DescripciónDescription Opcional /Optional /

NecesarioRequired
ID ="fieldID"ID ="fieldID" Especifica el nombre lógico del campo incluido en el archivo de datos.Specifies the logical name of the field in the data file. El valor de ID de un campo es la clave utilizada para referirse al campo.The ID of a field is the key used to refer to the field.

<FIELD ID="fieldID"/> se asigna a <COLUMN SOURCE="fieldID"/><FIELD ID="fieldID"/> maps to <COLUMN SOURCE="fieldID"/>
NecesarioRequired
xsi:type ="fieldType"xsi:type ="fieldType" Es una construcción XML (utilizada como atributo) que identifica el tipo de la instancia del elemento.This is an XML construct (used like an attribute) that identifies the type of the instance of the element. El valor de fieldType determina qué atributos opcionales (a continuación) necesita el usuario en una instancia determinada.The value of fieldType determines which of the optional attributes (below) you need in a given instance. Obligatorio (en función del tipo de datos)Required (depending on the data type)
LENGTH ="n"LENGTH ="n" Este atributo define la longitud de una instancia de un tipo de datos de longitud fija.This attribute defines the length for an instance of a fixed-length data type.

El valor de n debe ser un entero positivo.The value of n must be a positive integer.
Opcional a no ser que el valor de xsi:type lo requieraOptional unless required by the xsi:type value
PREFIX_LENGTH ="p"PREFIX_LENGTH ="p" Este atributo define la longitud del prefijo para una representación de datos binarios.This attribute defines the prefix length for a binary data representation. El valor de PREFIX_LENGTH, p, debe ser uno de los siguientes: 1, 2, 4 o 8.The PREFIX_LENGTH value, p, must be one of the following: 1, 2, 4, or 8. Opcional a no ser que el valor de xsi:type lo requieraOptional unless required by the xsi:type value
MAX_LENGTH ="m"MAX_LENGTH ="m" Este atributo es el número máximo de bytes que se pueden almacenar en un campo determinado.This attribute is the maximum number of bytes that can be stored in a given field. Sin una tabla de destino, la longitud máxima de la columna se desconoce.Without a target table, the column max-length is not known. El atributo MAX_LENGTH restringe la longitud máxima de una columna de caracteres de salida y limita el almacenamiento asignado al valor de la columna.The MAX_LENGTH attribute restricts the maximum length of an output character column, limiting the storage allocated for the column value. Esto resulta especialmente útil al usar la opción BULK de la función OPENROWSET en una cláusula SELECT FROM.This is especially convenient when using the OPENROWSET function's BULK option in a SELECT FROM clause.

El valor de m debe ser un entero positivo.The value of m must be a positive integer. De forma predeterminada, la longitud máxima es de 8.000 caracteres para una columna char y de 4.000 caracteres para una columna nchar .By default, the maximum length is 8000 characters for a char column and 4000 characters for an nchar column.
OpcionalOptional
COLLATION ="collationName"COLLATION ="collationName" COLLATION solo se permite para campos de caracteres.COLLATION is only allowed for character fields. Para ver una lista de los nombres de intercalación de SQL, vea Nombre de intercalación de SQL Server (Transact-SQL).For a list of the SQL collation names, see SQL Server Collation Name (Transact-SQL). OpcionalOptional
TERMINATOR = "terminator"TERMINATOR = "terminator" Este atributo especifica el terminador de un campo de datos.This attribute specifies the terminator of a data field. El terminador puede ser cualquier carácter.The terminator can be any character. Debe ser un carácter único que no forme parte de los datos.The terminator must be a unique character that is not part of the data.

De forma predeterminada, el terminador del campo es el carácter de tabulación (representado como \t).By default, the field terminator is the tab character (represented as \t). Para representar una marca de párrafo, utilice \r\n.To represent a paragraph mark, use \r\n.
Solo se usa con xsi:type de datos de caracteres, que requiere este atributoUsed only with an xsi:type of character data, which requires this attribute
Valores xsi:type del elemento <FIELD> Xsi:type values of the <FIELD> Element

El valor xsi:type es una construcción XML (usada como atributo) que identifica el tipo de datos de una instancia de un elemento.The xsi:type value is an XML construct (used like an attribute) that identifies the data type of an instance of an element. Para obtener más información acerca de su uso, vea "Colocar el valor xsi:type en un conjunto de datos", más adelante en este tema.For information on using the "Putting the xsi:type Value into a Data Set," later in this section.

El valor xsi:type del elemento <FIELD> admite los siguientes tipos de datos.The xsi:type value of the <FIELD> element supports the following data types.

Valores xsi:type de <FIELD><FIELD> xsi:type values Atributos XML obligatoriosRequired XML Attribute(s)

para el tipo de datosfor Data Type
Atributos XML opcionalesOptional XML Attribute(s)

para el tipo de datosfor Data Type
NativeFixedNativeFixed LENGTHLENGTH Ninguno.None.
NativePrefixNativePrefix PREFIX_LENGTHPREFIX_LENGTH MAX_LENGTHMAX_LENGTH
CharFixedCharFixed LENGTHLENGTH COLLATIONCOLLATION
NCharFixedNCharFixed LENGTHLENGTH COLLATIONCOLLATION
CharPrefixCharPrefix PREFIX_LENGTHPREFIX_LENGTH MAX_LENGTH, COLLATIONMAX_LENGTH, COLLATION
NCharPrefixNCharPrefix PREFIX_LENGTHPREFIX_LENGTH MAX_LENGTH, COLLATIONMAX_LENGTH, COLLATION
CharTermCharTerm TERMINATORTERMINATOR MAX_LENGTH, COLLATIONMAX_LENGTH, COLLATION
NCharTermNCharTerm TERMINATORTERMINATOR MAX_LENGTH, COLLATIONMAX_LENGTH, COLLATION

Para obtener más información sobre los tipos de datos MicrosoftMicrosoft SQL ServerSQL Server , vea Tipos de datos (Transact-SQL).For more information about MicrosoftMicrosoft SQL ServerSQL Server data types, see Data Types (Transact-SQL).

Atributos del elemento <COLUMN> Attributes of the <COLUMN> Element

En esta sección se describen los atributos del elemento <COLUMN>, que se resumen en la sintaxis de esquema siguiente:This section describes the attributes of the <COLUMN> element, which are summarized in the following schema syntax:

<COLUMN<COLUMN

SOURCE = "fieldID"SOURCE = "fieldID"

NAME = "columnName"NAME = "columnName"

xsi:type = "columnType"xsi:type = "columnType"

[ LENGTH = "n" ][ LENGTH = "n" ]

[ PRECISION = "n" ][ PRECISION = "n" ]

[ SCALE = "value" ][ SCALE = "value" ]

[ NULLABLE = { "YES"[ NULLABLE = { "YES"

"NO" } ]"NO" } ]

/>

Un campo se asigna a una columna de la tabla de destino mediante los atributos siguientes:A field is mapped to a column in the target table using the following attributes:

Atributo de COLUMNCOLUMN Attribute DescripciónDescription Opcional /Optional /

NecesarioRequired
SOURCE ="fieldID"SOURCE ="fieldID" Especifica el Id. del campo que se asigna a la columna.Specifies the ID of the field being mapped to the column.

<COLUMN SOURCE="fieldID"/> se asigna a <FIELD ID="fieldID"/><COLUMN SOURCE="fieldID"/> maps to <FIELD ID="fieldID"/>
NecesarioRequired
NAME = "columnName"NAME = "columnName" Especifica el nombre de la columna en el conjunto de filas representado por el archivo de formato.Specifies the name of the column in the row set represented by the format file. Este nombre de columna se utiliza para identificar la columna en el conjunto de resultados y no es necesario que corresponda al nombre de columna usado en la tabla de destino.This column name is used to identify the column in the result set, and it need not correspond to the column name used in the target table. NecesarioRequired
xsi:type ="ColumnType"xsi:type ="ColumnType" Es una construcción XML (utilizada como atributo) que identifica el tipo de datos de la instancia del elemento.This is an XML construct (used like an attribute) that identifies the data type of the instance of the element. El valor de ColumnType determina qué atributos opcionales (a continuación) necesita el usuario en una instancia determinada.The value of ColumnType determines which of the optional attributes (below) you need in a given instance.

Nota: Los valores posibles de ColumnType y sus atributos asociados se enumeran en la tabla de elementos <COLUMN> de la sección Valores xsi:type del elemento <COLUMN>.Note: The possible values of ColumnType and their associated attributes are listed in the <COLUMN> element table in the Xsi:type values of the <COLUMN> Element section.
OpcionalOptional
LENGTH ="n"LENGTH ="n" Define la longitud de una instancia de un tipo de datos de longitud fija.Defines the length for an instance of a fixed-length data type. LENGTH se utiliza solo cuando xsi:type es un tipo de datos de cadena.LENGTH is used only when the xsi:type is a string data type.

El valor de n debe ser un entero positivo.The value of n must be a positive integer.
Opcional (solo disponible si xsi:type es un tipo de datos de cadena)Optional (available only if the xsi:type is a string data type)
PRECISION ="n"PRECISION ="n" Indica el número de dígitos de un número.Indicates the number of digits in a number. Por ejemplo, el número 123,45 tiene una precisión de 5.For example, the number 123.45 has a precision of 5.

El valor debe ser un entero positivo.The value must be a positive integer.
Opcional (solo disponible si xsi:type es un tipo de datos de número variable)Optional (available only if the xsi:type is a variable-number data type)
SCALE ="int"SCALE ="int" Indica el número de dígitos situados a la derecha de la coma decimal de un número.Indicates the number of digits to the right of the decimal point in a number. Por ejemplo, el número 123,45 tiene una escala de 2.For example, the number 123.45 has a scale of 2.

El valor debe ser un entero.The value must be an integer.
Opcional (solo disponible si xsi:type es un tipo de datos de número variable)Optional (available only if the xsi:type is a variable-number data type)
NULLABLE = { "YES"NULLABLE = { "YES"

"NO" }"NO" }
Indica si una columna puede aceptar valores NULL.Indicates whether a column can assume NULL values. Este atributo es completamente independiente de FIELDS.This attribute is completely independent of FIELDS. No obstante, si una columna tiene el valor de NULLABLE establecido en NO y el campo especifica NULL (es decir, no especifica ningún valor), se produce un error de tiempo de ejecución.However, if a column is not NULLABLE and field specifies NULL (by not specifying any value), a run-time error results.

El atributo NULLABLE solo se usa si escribe una instrucción SELECT FROM OPENROWSET(BULK...) simple.The NULLABLE attribute is used only if you do a plain SELECT FROM OPENROWSET(BULK...) statement.
Opcional (disponible para cualquier tipo de datos)Optional (available for any data type)
Valores xsi:type del elemento <COLUMN> Xsi:type values of the <COLUMN> Element

El valor xsi:type es una construcción XML (usada como atributo) que identifica el tipo de datos de una instancia de un elemento.The xsi:type value is an XML construct (used like an attribute) that identifies the data type of an instance of an element. Para obtener más información acerca de su uso, vea "Colocar el valor xsi:type en un conjunto de datos", más adelante en este tema.For information on using the "Putting the xsi:type Value into a Data Set," later in this section.

El elemento <COLUMN> admite tipos de datos SQL nativos, de la forma siguiente:The <COLUMN> element supports native SQL data types, as follows:

Categoría de tipoType Category Tipos de datos de <COLUMN><COLUMN> Data Types Atributos XML obligatoriosRequired XML Attribute(s)

para el tipo de datosfor Data Type
Atributos XML opcionalesOptional XML Attribute(s)

para el tipo de datosfor Data Type
FixedFixed SQLBIT, SQLTINYINT, SQLSMALLINT, SQLINT, SQLBIGINT, SQLFLT4, SQLFLT8, SQLDATETIME, SQLDATETIM4, SQLDATETIM8, SQLMONEY, SQLMONEY4, SQLVARIANTy SQLUNIQUEIDSQLBIT, SQLTINYINT, SQLSMALLINT, SQLINT, SQLBIGINT, SQLFLT4, SQLFLT8, SQLDATETIME, SQLDATETIM4, SQLDATETIM8, SQLMONEY, SQLMONEY4, SQLVARIANT, and SQLUNIQUEID Ninguno.None. NULLABLENULLABLE
Número de variableVariable Number SQLDECIMAL y SQLNUMERICSQLDECIMAL and SQLNUMERIC Ninguno.None. NULLABLE, PRECISION, SCALENULLABLE, PRECISION, SCALE
LOBLOB SQLIMAGE, CharLOB, SQLTEXTy SQLUDTSQLIMAGE, CharLOB, SQLTEXT, and SQLUDT Ninguno.None. NULLABLENULLABLE
LOB de caracteresCharacter LOB SQLNTEXTSQLNTEXT Ninguno.None. NULLABLENULLABLE
Cadena binariaBinary string SQLBINARY y SQLVARYBINSQLBINARY and SQLVARYBIN Ninguno.None. NULLABLE, LENGTHNULLABLE, LENGTH
Cadena de caracteresCharacter string SQLCHAR, SQLVARYCHAR, SQLNCHARy SQLNVARCHARSQLCHAR, SQLVARYCHAR, SQLNCHAR, and SQLNVARCHAR Ninguno.None. NULLABLE, LENGTHNULLABLE, LENGTH
Importante

Para importar o exportar datos SQLXML de manera masiva, use 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).To bulk export or import SQLXML data, use one of the following data types in your format file: SQLCHAR or SQLVARYCHAR (the data is sent in the client code page or in the code page implied by the collation), SQLNCHAR or SQLNVARCHAR (the data is sent as Unicode), or SQLBINARY or SQLVARYBIN (the data is sent without any conversion).

Para obtener más información sobre los tipos de datos SQL ServerSQL Server , vea Tipos de datos (Transact-SQL).For more information about SQL ServerSQL Server data types, see Data Types (Transact-SQL).

Cómo usa la importación en bloque el elemento <ROW> How Bulk Import Uses the <ROW> Element

El elemento <ROW> se omite en algunos contextos.The <ROW> element is ignored in some contexts. El hecho de que un elemento <ROW> afecte a una operación de importación en bloque depende de cómo se realice la operación:Whether the <ROW> element affects a bulk-import operation depends on how the operation is performed:

  • Comando bcp the bcp command

    Al cargar datos en una tabla de destino, bcp omite al componente <ROW>.When data is loaded into a target table, bcp ignores the <ROW> component. En su lugar, bcp carga los datos en función de los tipos de columnas de la tabla de destino.Instead, bcp loads the data based on the column types of the target table.

  • Transact-SQLTransact-SQL instrucciones (proveedor de conjuntos de filas BULK de BULK INSERT y OPENROWSET) statements (BULK INSERT and OPENROWSET's Bulk rowset provider)

    Al realizar una importación en bloque de datos en una tabla, las instrucciones Transact-SQLTransact-SQL usan el componente <ROW> para generar el conjunto de filas de entrada.When bulk importing data into a table, Transact-SQLTransact-SQL statements use the <ROW> component to generate the input rowset. Además, las instrucciones Transact-SQLTransact-SQL realizan las conversiones de tipos adecuadas en función de los tipos de columna especificados en <ROW> y de la columna correspondiente en la tabla de destino.Also, Transact-SQLTransact-SQL statements perform appropriate type conversions based on the column types specified under <ROW> and the corresponding column in the target table. Si los tipos de columna especificados en el archivo de formato y la tabla de destino no coinciden, se realiza una conversión de tipo adicional.If a mismatch exists between column types as specified in the format file and in the target table, an extra type conversion occurs. Esta conversión de tipo adicional puede llevar a discrepancias (es decir, a una pérdida de precisión) en cuanto al comportamiento en el proveedor de conjuntos de filas BULK de OPENROWSET o BULK INSERT en comparación con bcp.This extra type conversion may lead to some discrepancy (that is, a loss of precision) in behavior in BULK INSERT or OPENROWSET's Bulk rowset provider as compared to bcp.

    La información del elemento <ROW> permite construir una fila sin necesidad de información adicional.The information in the <ROW> element allows a row to be constructed without requiring any additional information. Por este motivo, puede generar un conjunto de filas mediante una instrucción SELECT (SELECT * FROM OPENROWSET(BULK datafile FORMATFILE=xmlformatfile).For this reason, you can generate a rowset using a SELECT statement (SELECT * FROM OPENROWSET(BULK datafile FORMATFILE=xmlformatfile).

    Nota

    La cláusula OPENROWSET BULK requiere un archivo de formato (tenga en cuenta que solo se puede convertir desde el tipo de datos del campo al tipo de datos de una columna con un archivo de formato XML).The OPENROWSET BULK clause requires a format file (note that converting from the data type of the field to the data type of a column is available only with an XML format file).

Cómo usa la importación en bloque el elemento <COLUMN> How Bulk Import Uses the <COLUMN> Element

Para realizar una importación en bloque de datos en una tabla, los elementos <COLUMN> de un archivo de formato asignan un campo de archivo de datos a columnas de tabla al especificar:For bulk importing data into a table, the <COLUMN> elements in a format file map a data-file field to table columns by specifying:

  • La posición de cada campo dentro de una fila del archivo de datos.The position of each field within a row in the data file.

  • El tipo de columna, que se utiliza para convertir el tipo de datos de campo al tipo de datos de columna deseado.The column type, which is used to convert the field data type to the desired column data type.

    Si un campo no tiene asignada ninguna columna, el campo no se copia en las filas generadas.If no column is mapped to a field, the field is not copied into the generated row(s). Este comportamiento permite a un archivo de datos generar filas con distintas columnas (en tablas diferentes).This behavior allows a data file to generate rows with different columns (in different tables).

    De forma similar, para exportar de forma masiva datos de una tabla, cada elemento <COLUMN> del archivo de formato asigna la columna de la fila de la tabla de entrada a su campo correspondiente en el archivo de datos de salida.Similarly, for bulk exporting data from a table, each <COLUMN> in the format file maps the column from the input table row to its corresponding field in the output data file.

Colocar el valor xsi:type en un conjunto de datos Putting the xsi:type Value into a Data Set

Si un documento XML se valida con el lenguaje de definición de esquema XML (XSD), el valor xsi:type no se coloca en el conjunto de datos.When an XML document is validated through the XML Schema Definition (XSD) language, the xsi:type value is not put into the data set. No obstante, puede colocar la información de xsi:type en el conjunto de datos si carga el archivo de formato XML en un documento XML (por ejemplo, myDoc), tal como ilustra el siguiente fragmento de código:However, you can put the xsi:type information into the data set by loading the XML format file into an XML document (for example, myDoc), as illustrated in the following code snippet:

...;  
myDoc.LoadXml(xmlFormat);  
XmlNodeList ColumnList = myDoc.GetElementsByTagName("COLUMN");  
for(int i=0;i<ColumnList.Count;i++)  
{  
   Console.Write("COLUMN: xsi:type=" +ColumnList[i].Attributes["type",  
      "http://www.w3.org/2001/XMLSchema-instance"].Value+"\n");  
}  

Archivos de formato XML de ejemplo Sample XML Format Files

Esta sección contiene información sobre el uso de archivos de formato XML en diversos casos, incluido un ejemplo de Adventure WorksAdventure Works .This section contains information on using XML format files in a variety of cases, including an Adventure WorksAdventure Works example.

Nota

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.In the data files shown in the following examples, <tab> indicates a tab character in a data file, and <return> indicates a carriage return.

Los ejemplos muestran los aspectos clave del uso de archivos de formato XML, del siguiente modo:The examples illustrate key aspects of using XML format files, as follows:

Nota

Para obtener información sobre cómo crear archivos de formato, vea Crear un archivo de formato (SQL Server).For information about how to create format files, see Create a Format File (SQL Server).

A. A. Ordenar campos de datos de caracteres igual que columnas de tablaOrdering character-data fields the same as table columns

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.The following example shows an XML format file that describes a data file containing three fields of character data. El archivo de formato asigna el archivo de datos a una tabla que contiene tres columnas.The format file maps the data file to a table that contains three columns. Los campos de datos se corresponden uno a uno con las columnas de la tabla.The data fields correspond one-to-one with the columns of the table.

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

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

El siguiente archivo de formato XML lee del archivo de datos a la tabla.The following XML format file reads from the data file to the table.

En el elemento <RECORD> , el archivo de formato representa los valores de datos de los tres campos como datos de caracteres.In the <RECORD> element, the format file represents the data values in all three fields as character data. Para cada campo, el atributo TERMINATOR indica el terminador que sigue al valor de datos.For each field, the TERMINATOR attribute indicates the terminator that follows the data value.

Los campos de datos se corresponden uno a uno con las columnas de la tabla.The data fields correspond one-to-one with the columns of the table. 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.In the <ROW> element, the format file maps the column Age to the first field, the column FirstName to the second field, and the column LastName to the third field.

<?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="\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 de AdventureWorks2012AdventureWorks2012 , vea Crear un archivo de formato (SQL Server).For an equivalent AdventureWorks2012AdventureWorks2012 example, see Create a Format File (SQL Server).

B. B. Ordenar campos de datos y columnas de tabla de forma diferenteOrdering data fields and table columns differently

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.The following example shows an XML format file that describes a data file containing three fields of character data. 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.The format file maps the data file to a table that contains three columns that are ordered differently from the fields of the data file.

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

Archivo de datos (registro): Age<tab>Lastname<tab>Firstname<return>Data file (record): 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.In the <RECORD> element, the format file represents the data values in all three fields as character data.

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.In the <ROW> element, the format file maps the column Age to the first field, the column FirstName to the third field, and the column LastName to the second field.

<?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="\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 de AdventureWorks2012AdventureWorks2012 , vea Usar un archivo de formato para asignar columnas de tabla a campos de un archivo de datos (SQL Server).For an equivalent AdventureWorks2012AdventureWorks2012 example, see Use a Format File to Map Table Columns to Data-File Fields (SQL Server).

C. C. Omitir un campo de datosOmitting a data field

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.The following example shows an XML format file that describes a data file containing four fields of character data. El archivo de formato asigna el archivo de datos a una tabla que contiene tres columnas.The format file maps the data file to a table that contains three columns. El segundo campo de datos no se corresponde con ninguna columna de la tabla.The second data field does not correspond to any table column.

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

Archivo de datos (registro): Age<tab>employeeID<tab>Firstname<tab>Lastname<return>Data file (record): 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.In the <RECORD> element, the format file represents the data values in all four fields as character data. Para cada campo, el atributo TERMINATOR indica el terminador que sigue al valor de datos.For each field, the TERMINATOR attribute indicates the terminator that follows the data value.

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.In the <ROW> element, the format file maps the column Age to the first field, the column FirstName to the third field, and the column LastName to the fourth field.

<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="\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 de AdventureWorks2012AdventureWorks2012 , vea Usar un archivo de formato para omitir un campo de datos (SQL Server).For an equivalent AdventureWorks2012AdventureWorks2012 example, see Use a Format File to Skip a Data Field (SQL Server).

D. D. Asignar el xsi:type <FIELD> al xsi:type <COLUMN>Mapping <FIELD> xsi:type to <COLUMN> xsi:type

En el ejemplo siguiente se muestran tipos de campos diferentes y sus asignaciones a columnas.The following example shows different types of fields and their mappings to columns.

<?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 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. E. Asignar datos XML a una tablaMapping XML data to a table

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 .The following example creates an empty two-column table (t_xml), in which the first column maps to the int data type and the second column maps to the xml data type.

CREATE TABLE t_xml (c1 int, c2 xml)  

El siguiente archivo de formato XML carga un archivo de datos en una tabla t_xml.The following XML format file would load a data file into table t_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="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. F. Importar campos de longitud fija o de ancho fijoImporting fixed-length or fixed-width fields

En el siguiente ejemplo se describen campos fijos de 10 o 6 caracteres cada uno.The following example describes fixed fields of 10 or 6 characters each. El archivo de formato representa estas longitudes y anchos de campo como LENGTH="10" y LENGTH="6", respectivamente.The format file represents these field lengths/widths as LENGTH="10" and LENGTH="6", respectively. Cada una de las filas 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".Every row of the data files ends with a carriage return-line feed combination, {CR}{LF}, which the format file represents as TERMINATOR="\r\n".

<?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="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>  

Otros ejemplos Additional Examples

Para obtener más ejemplos tanto de archivos de formato XML como de formato no XML, vea los siguientes temas:For additional examples of both non-XML format files and XML format files, see the following topics:

Ninguno.None.

Vea tambiénSee Also

Importar y exportar datos en bloque (SQL Server) Bulk Import and Export of Data (SQL Server)
Tipos de datos (Transact-SQL) Data Types (Transact-SQL)
Archivos de formato no XML (SQL Server) Non-XML Format Files (SQL Server)
Archivos de formato para importar o exportar datos (SQL Server) Format Files for Importing or Exporting Data (SQL Server)