BULK INSERT (Transact-SQL)BULK INSERT (Transact-SQL)

SE APLICA A: síSQL Server (a partir de 2008) síAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Importa un archivo de datos en una tabla o vista de base de datos con un formato especificado por el usuario en SQL ServerSQL ServerImports a data file into a database table or view in a user-specified format in SQL ServerSQL Server

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

BULK INSERT   
   { database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }
      FROM 'data_file'   
     [ WITH   
    (   
   [ [ , ] BATCHSIZE = batch_size ]   
   [ [ , ] CHECK_CONSTRAINTS ]   
   [ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]   
   [ [ , ] DATAFILETYPE =   
      { 'char' | 'native'| 'widechar' | 'widenative' } ]   
   [ [ , ] DATASOURCE = 'data_source_name' ]
   [ [ , ] ERRORFILE = 'file_name' ]
   [ [ , ] ERRORFILE_DATA_SOURCE = 'data_source_name' ]   
   [ [ , ] FIRSTROW = first_row ]   
   [ [ , ] FIRE_TRIGGERS ]   
   [ [ , ] FORMATFILE_DATASOURCE = 'data_source_name' ]
   [ [ , ] KEEPIDENTITY ]   
   [ [ , ] KEEPNULLS ]   
   [ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]   
   [ [ , ] LASTROW = last_row ]   
   [ [ , ] MAXERRORS = max_errors ]   
   [ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]   
   [ [ , ] ROWS_PER_BATCH = rows_per_batch ]   
   [ [ , ] ROWTERMINATOR = 'row_terminator' ]   
   [ [ , ] TABLOCK ]   

   -- input file format options
   [ [ , ] FORMAT = 'CSV' ]
   [ [ , ] FIELDQUOTE = 'quote_characters']
   [ [ , ] FORMATFILE = 'format_file_path' ]   
   [ [ , ] FIELDTERMINATOR = 'field_terminator' ]   
   [ [ , ] ROWTERMINATOR = 'row_terminator' ]   
    )]   

ArgumentosArguments

database_namedatabase_name
Es el nombre de la base de datos donde reside la tabla o la vista especificada.Is the database name in which the specified table or view resides. Si no se especifica, es la base de datos actual.If not specified, this is the current database.

schema_nameschema_name
Es el nombre del esquema de la tabla o vista.Is the name of the table or view schema. schema_name es opcional si el esquema predeterminado para el usuario que realiza la operación de importación masiva es el esquema de la tabla o vista especificada.schema_name is optional if the default schema for the user performing the bulk-import operation is schema of the specified table or view. Si no se especifica schema y el esquema predeterminado del usuario que realiza la operación de importación masiva es diferente de la tabla o la vista especificada, SQL ServerSQL Server devuelve un mensaje de error y se cancela la operación de importación masiva.If schema is not specified and the default schema of the user performing the bulk-import operation is different from the specified table or view, SQL ServerSQL Server returns an error message, and the bulk-import operation is canceled.

table_nametable_name
Es el nombre de la tabla o vista en la que se va a realizar una importación masiva de datos.Is the name of the table or view to bulk import data into. Solo se pueden utilizar vistas en las que todas las columnas hagan referencia a la misma tabla base.Only views in which all columns refer to the same base table can be used. Para más información sobre las restricciones para cargar datos en vistas, vea INSERT (Transact-SQL).For more information about the restrictions for loading data into views, see INSERT (Transact-SQL).

' data_file '' data_file '
Es la ruta de acceso completa al archivo de datos que contiene los datos que se van a importar en la tabla o vista especificada.Is the full path of the data file that contains data to import into the specified table or view. BULK INSERT puede importar datos desde un disco (incluidos una ubicación de red, disquete, disco duro, etc.).BULK INSERT can import data from a disk (including network, floppy disk, hard disk, and so on).

data_file debe especificar una ruta de acceso válida del servidor en el que se ejecuta SQL ServerSQL Server.data_file must specify a valid path from the server on which SQL ServerSQL Server is running. Si data_file es un archivo remoto, especifique un nombre UNC (convención de nomenclatura universal).If data_file is a remote file, specify the Universal Naming Convention (UNC) name. Un nombre UNC tiene el formato \\Systemname\ShareName\Path\FileName.A UNC name has the form \\Systemname\ShareName\Path\FileName. Por ejemplo:For example:

BULK INSERT Sales.Orders
FROM '\\SystemX\DiskZ\Sales\data\orders.dat';

Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
A partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, data_file puede estar en Azure Blob Storage.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP1.1, the data_file can be in Azure blob storage. En ese caso, deberá especificar la opción data_source_name.In that case, you need to specify data_source_name option.

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

' data_source_name ' ' data_source_name '
Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
Es un origen de datos externo con nombre que apunta a la ubicación de Azure Blob Storage del archivo que se importará.Is a named external data source pointing to the Azure Blob storage location of the file that will be imported. El origen de datos externo se debe crear con la opción TYPE = BLOB_STORAGE que se ha incluido en SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Para más información, vea CREATE EXTERNAL DATA SOURCE.For more information, see CREATE EXTERNAL DATA SOURCE.

BULK INSERT Sales.Orders
FROM 'data/orders.dat'
WITH ( DATA_SOURCE = 'MyAzureBlobStorageAccount');

BATCHSIZE = batch_sizeBATCHSIZE =batch_size
Especifica el número de filas de un lote.Specifies the number of rows in a batch. Cada lote se copia en el servidor como una transacción.Each batch is copied to the server as one transaction. Si no ocurre así, SQL ServerSQL Server confirma o revierte la transacción de cada lote.If this fails, SQL ServerSQL Server commits or rolls back the transaction for every batch. De forma predeterminada, todos los datos del archivo de datos especificado componen un lote.By default, all data in the specified data file is one batch. Para obtener información acerca de consideraciones de rendimiento, vea la sección "Comentarios" más adelante en este tema.For information about performance considerations, see "Remarks," later in this topic.

CHECK_CONSTRAINTSCHECK_CONSTRAINTS
Especifica que deben comprobarse todas las restricciones de la tabla o vista de destino durante la operación de importación masiva.Specifies that all constraints on the target table or view must be checked during the bulk-import operation. Sin la opción CHECK_CONSTRAINTS, se omiten las restricciones CHECK y FOREIGN KEY, y, después de la operación, la restricción sobre la tabla se marca como de no confianza.Without the CHECK_CONSTRAINTS option, any CHECK and FOREIGN KEY constraints are ignored, and after the operation, the constraint on the table is marked as not-trusted.

Nota

Las restricciones UNIQUE y PRIMARY KEY se aplican siempre.UNIQUE, and PRIMARY KEY constraints are always enforced. Cuando se importa en una columna de caracteres definida con la restricción NOT NULL, BULK INSERT inserta una cadena vacía cuando no hay valor en el archivo de texto.When importing into a character column that is defined with a NOT NULL constraint, BULK INSERT inserts a blank string when there is no value in the text file.

En algún momento, debe examinar las restricciones de toda la tabla.At some point, you must examine the constraints on the whole table. Si la tabla no estaba vacía antes de la operación de importación masiva, el costo de revalidar la restricción puede superar del costo de aplicar restricciones CHECK a los datos incrementales.If the table was non-empty before the bulk-import operation, the cost of revalidating the constraint may exceed the cost of applying CHECK constraints to the incremental data.

Una situación en la que quizá desee que las restricciones estén deshabilitadas (comportamiento predeterminado) es si los datos de entrada contienen filas que infringen las restricciones.A situation in which you might want constraints disabled (the default behavior) is if the input data contains rows that violate constraints. Con las restricciones CHECK deshabilitadas, puede importar los datos y utilizar después instrucciones Transact-SQLTransact-SQL para quitar los datos no válidos.With CHECK constraints disabled, you can import the data and then use Transact-SQLTransact-SQL statements to remove the invalid data.

Nota

La opción MAXERRORS no se aplica a la comprobación de restricciones.The MAXERRORS option does not apply to constraint checking.

CODEPAGE = { ' ACP ' | ' OEM ' | ' RAW ' | ' code_page ' }CODEPAGE = { ' ACP ' | ' OEM ' | ' RAW ' | 'code_page' }
Especifica la página de códigos de los datos incluidos en el archivo de datos.Specifies the code page of the data in the data file. CODEPAGE solo es pertinente si los datos contienen columnas de tipo char, varchar o text con valores de caracteres mayores que 127 o menores que 32.CODEPAGE is relevant only if the data contains char, varchar, or text columns with character values greater than 127 or less than 32.

BULK INSERT Sales.Orders
FROM '\\SystemX\DiskZ\Sales\data\orders.dat'
WITH ( CODEPAGE=65001 ); -- UTF-8 encoding

Importante

CODEPAGE no es una opción admitida en SQL Server 2017 (14.x)SQL Server 2017 (14.x).CODEPAGE is not a supported option on Linux for SQL Server 2017 (14.x)SQL Server 2017 (14.x). Para Versión preliminar de SQL Server 2019SQL Server 2019 preview, solo la opción "RAW" se permite para CODEPAGE.For Versión preliminar de SQL Server 2019SQL Server 2019 preview, only the 'RAW' option is allowed for CODEPAGE.

Nota

MicrosoftMicrosoft recomienda especificar un nombre de intercalación para cada columna de un archivo de formato.recommends that you specify a collation name for each column in a format file.

Valor de CODEPAGECODEPAGE value DescripciónDescription
ACPACP Convierte columnas de los tipos de datos char, varchar o text de la página de códigos ANSIANSI/MicrosoftMicrosoft Windows (ISO 1252) a la página de códigos de SQL ServerSQL Server.Columns of char, varchar, or text data type are converted from the ANSIANSI/MicrosoftMicrosoft Windows code page (ISO 1252) to the SQL ServerSQL Server code page.
OEM (valor predeterminado)OEM (default) Convierte columnas de los tipos de datos char, varchar o text de la página de códigos OEM a la página de códigos de SQL ServerSQL Server.Columns of char, varchar, or text data type are converted from the system OEM code page to the SQL ServerSQL Server code page.
RAWRAW No se realiza ninguna conversión de una página de códigos a otra; se trata de la opción más rápida.No conversion from one code page to another occurs; this is the fastest option.
code_pagecode_page Número específico de una página de códigos; por ejemplo, 850.Specific code page number, for example, 850.

**Importante** Las versiones anteriores a SQL Server 2016 (13.x)SQL Server 2016 (13.x) no admiten la página de códigos 65001 (codificación UTF-8).** Important ** Versions prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) do not support code page 65001 (UTF-8 encoding).
   

DATAFILETYPE = { 'char' | 'native' | 'widechar' | 'widenative' }DATAFILETYPE = { 'char' | 'native' | 'widechar' | 'widenative' }
Especifica que BULK INSERT realiza la operación de importación con el valor de tipo de archivo de datos especificado.Specifies that BULK INSERT performs the import operation using the specified data-file type value.

 

Valor de DATAFILETYPEDATAFILETYPE value Todos los datos representados en:All data represented in:
char (valor predeterminado)char (default) Formato de caracteres.Character format.

Para obtener más información, vea Usar el formato de caracteres para importar o exportar datos (SQL Server).For more information, see Use Character Format to Import or Export Data (SQL Server).
nativenative Tipos de datos nativos (base de datos).Native (database) data types. Cree el archivo de datos nativos mediante la importación masiva de datos desde SQL ServerSQL Server con la utilidad bcp.Create the native data file by bulk importing data from SQL ServerSQL Server using the bcp utility.

El valor native ofrece una alternativa de mayor rendimiento al valor char.The native value offers a higher performance alternative to the char value.

Para obtener más información, vea Usar el formato nativo para importar o exportar datos (SQL Server).For more information, see Use Native Format to Import or Export Data (SQL Server).
widecharwidechar Caracteres Unicode.Unicode characters.

Para obtener más información, vea Usar el formato de caracteres Unicode para importar o exportar datos (SQL Server).For more information, see Use Unicode Character Format to Import or Export Data (SQL Server).
widenativewidenative Tipos de datos nativos (base de datos), salvo en las columnas char, varchar y text, en las que los datos se almacenan como datos Unicode.Native (database) data types, except in char, varchar, and text columns, in which data is stored as Unicode. Cree el archivo de datos widenative mediante la importación masiva de datos desde SQL ServerSQL Server con la utilidad bcp.Create the widenative data file by bulk importing data from SQL ServerSQL Server using the bcp utility.

El valor widenative ofrece una alternativa de mayor rendimiento a widechar.The widenative value offers a higher performance alternative to widechar. Si el archivo de datos contiene caracteres extendidos ANSIANSI, especifique widenative.If the data file contains ANSIANSI extended characters, specify widenative.

Para obtener más información, vea Usar el formato nativo Unicode para importar o exportar datos (SQL Server).For more information, see Use Unicode Native Format to Import or Export Data (SQL Server).
   

ERRORFILE =' file_name 'ERRORFILE ='file_name'
Especifica el archivo utilizado para recopilar filas que tienen errores de formato y no pueden convertirse en un conjunto de filas OLE DB.Specifies the file used to collect rows that have formatting errors and cannot be converted to an OLE DB rowset. Estas filas se copian en este archivo de errores desde el archivo de datos "tal cual".These rows are copied into this error file from the data file "as is."

El archivo de errores se crea cuando se ejecuta el comando.The error file is created when the command is executed. Se produce un error si el archivo ya existe.An error occurs if the file already exists. Además, se crea un archivo de control con la extensión .ERROR.txt.Additionally, a control file that has the extension .ERROR.txt is created. Este archivo hace referencia a cada fila del archivo de errores y proporciona diagnósticos de errores.This references each row in the error file and provides error diagnostics. Tan pronto como se corrigen los errores, se pueden cargar los datos.As soon as the errors have been corrected, the data can be loaded.
Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. A partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x), error_file_path puede estar en Azure Blob Storage.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the error_file_path can be in Azure blob storage.

'errorfile_data_source_name''errorfile_data_source_name'
Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Es un origen de datos externo con nombre que apunta a la ubicación de Azure Blob Storage del archivo de error que contendrá los errores encontrados durante la importación.Is a named external data source pointing to the Azure Blob storage location of the error file that will contain errors found during the import. El origen de datos externo se debe crear con la opción TYPE = BLOB_STORAGE que se ha incluido en SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Para más información, vea CREATE EXTERNAL DATA SOURCE.For more information, see CREATE EXTERNAL DATA SOURCE.

FIRSTROW = first_rowFIRSTROW = first_row
Especifica el número de la primera fila que se va a cargar.Specifies the number of the first row to load. El valor predeterminado es la primera fila del archivo de datos especificado.The default is the first row in the specified data file. FIRSTROW está en base 1.FIRSTROW is 1-based.

Nota

El atributo FIRSTROW no está pensado para saltar los encabezados de columna.The FIRSTROW attribute is not intended to skip column headers. La instrucción BULK INSERT no permite omitir los encabezados.Skipping headers is not supported by the BULK INSERT statement. Al omitir filas, Motor de base de datos de SQL ServerSQL Server Database Engine solo analiza los terminadores de campo y no valida los datos en los campos de las filas omitidas.When skipping rows, the Motor de base de datos de SQL ServerSQL Server Database Engine looks only at the field terminators, and does not validate the data in the fields of skipped rows.

FIRE_TRIGGERSFIRE_TRIGGERS
Especifica que se ejecutarán todos los desencadenadores de inserción definidos en la tabla de destino durante la operación de importación masiva.Specifies that any insert triggers defined on the destination table execute during the bulk-import operation. Si se definen desencadenadores para operaciones INSERT en la tabla de destino, se activan para cada lote completado.If triggers are defined for INSERT operations on the target table, they are fired for every completed batch.

Si no se especifica FIRE_TRIGGERS, no se ejecuta ningún desencadenador de inserción.If FIRE_TRIGGERS is not specified, no insert triggers execute.

FORMATFILE_DATASOURCE = 'data_source_name'FORMATFILE_DATASOURCE = 'data_source_name'
Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) 1.1.
Es un origen de datos externo con nombre que apunta a la ubicación de Azure Blob Storage del archivo de formato que definirá el esquema de los datos importados.Is a named external data source pointing to the Azure Blob storage location of the format file that will define the schema of imported data. El origen de datos externo se debe crear con la opción TYPE = BLOB_STORAGE que se ha incluido en SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.The external data source must be created using the TYPE = BLOB_STORAGE option added in SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Para más información, vea CREATE EXTERNAL DATA SOURCE.For more information, see CREATE EXTERNAL DATA SOURCE.

KEEPIDENTITYKEEPIDENTITY
Especifica que se usará el valor o valores de identidad del archivo de datos importado para la columna de identidad.Specifies that identity value or values in the imported data file are to be used for the identity column. Si no se especifica KEEPIDENTITY, los valores de identidad de esta columna se comprueban pero no se importan y SQL ServerSQL Server asigna automáticamente valores únicos basados en los valores de inicialización y de incremento especificados durante la creación de la tabla.If KEEPIDENTITY is not specified, the identity values for this column are verified but not imported and SQL ServerSQL Server automatically assigns unique values based on the seed and increment values specified during table creation. Si el archivo de datos no contiene valores para la columna de identidad de la tabla o vista, utilice un archivo de formato para especificar que se debe omitir la columna de identidad de la tabla o vista cuando se importen los datos; SQL ServerSQL Server asigna automáticamente valores únicos para la columna.If the data file does not contain values for the identity column in the table or view, use a format file to specify that the identity column in the table or view is to be skipped when importing data; SQL ServerSQL Server automatically assigns unique values for the column. Para obtener más información, vea DBCC CHECKIDENT (Transact-SQL).For more information, see DBCC CHECKIDENT (Transact-SQL).

Si quiere saber más sobre cómo mantener valores de identidad, vea Mantener valores de identidad al importar datos de forma masiva (SQL Server).For more information, see about keeping identify values see Keep Identity Values When Bulk Importing Data (SQL Server).

KEEPNULLSKEEPNULLS
Especifica que las columnas vacías deben conservar un valor NULL durante la operación de importación masiva, en lugar de tener valores predeterminados para las columnas insertadas.Specifies that empty columns should retain a null value during the bulk-import operation, instead of having any default values for the columns inserted. Para obtener más información, vea Mantener valores NULL o usar valores predeterminados durante la importación en bloque (SQL Server).For more information, see Keep Nulls or Use Default Values During Bulk Import (SQL Server).

KILOBYTES_PER_BATCH = kilobytes_per_batchKILOBYTES_PER_BATCH = kilobytes_per_batch
Especifica el número aproximado de kilobytes (KB) de datos por lote como kilobytes_per_batch.Specifies the approximate number of kilobytes (KB) of data per batch as kilobytes_per_batch. De forma predeterminada, el valor de KILOBYTES_PER_BATCH es desconocido.By default, KILOBYTES_PER_BATCH is unknown. Para obtener información acerca de consideraciones de rendimiento, vea la sección "Comentarios" más adelante en este tema.For information about performance considerations, see "Remarks," later in this topic.

LASTROW = last_row Especifica el número de la última fila que va a cargarse.LASTROW = last_row Specifies the number of the last row to load. El valor predeterminado es 0, que indica la última fila del archivo de datos especificado.The default is 0, which indicates the last row in the specified data file.

MAXERRORS = max_errorsMAXERRORS = max_errors
Especifica el número máximo de errores de sintaxis permitidos en los datos antes de cancelar la operación de importación masiva.Specifies the maximum number of syntax errors allowed in the data before the bulk-import operation is canceled. Cada fila que no se puede importar con la operación de importación masiva se omite y se considera un error.Each row that cannot be imported by the bulk-import operation is ignored and counted as one error. Si no se especifica max_errors, el valor predeterminado es 10.If max_errors is not specified, the default is 10.

Nota

La opción MAX_ERRORS no se aplica a comprobaciones de restricciones ni para convertir tipos de datos money y bigint.The MAX_ERRORS option does not apply to constraint checks or to converting money and bigint data types.

ORDER ( { column [ ASC | DESC ] } [ , ... n ] )ORDER ( { column [ ASC | DESC ] } [ ,... n ] )
Especifica la forma en que están ordenados los datos del archivo de datos.Specifies how the data in the data file is sorted. El rendimiento de la importación masiva mejora si los datos importados se ordenan según el índice clúster de la tabla, si lo hay.Bulk import performance is improved if the data being imported is sorted according to the clustered index on the table, if any. Si el archivo de datos se ordena siguiendo otro criterio que no sea el orden de una clave de índice agrupado, o si no hay ningún índice agrupado en la tabla, se omite la cláusula ORDER.If the data file is sorted in a different order, that is other than the order of a clustered index key or if there is no clustered index on the table, the ORDER clause is ignored. Los nombres de columna facilitados deben ser nombres válidos en la tabla de destino.The column names supplied must be valid column names in the destination table. De forma predeterminada, la operación de inserción masiva presupone que los datos del archivo no están ordenados.By default, the bulk insert operation assumes the data file is unordered. En las importaciones masivas optimizadas, SQL ServerSQL Server también valida que los datos importados estén ordenados.For optimized bulk import, SQL ServerSQL Server also validates that the imported data is sorted.

nn
Es un marcador de posición que indica que se pueden especificar varias columnas.Is a placeholder that indicates that multiple columns can be specified.

ROWS_PER_BATCH = rows_per_batchROWS_PER_BATCH = rows_per_batch
Indica el número aproximado de filas de datos del archivo de datos.Indicates the approximate number of rows of data in the data file.

De forma predeterminada, todos los datos del archivo de datos se envían al servidor en una sola transacción y el optimizador de consultas desconoce el número de filas del lote.By default, all the data in the data file is sent to the server as a single transaction, and the number of rows in the batch is unknown to the query optimizer. Si especifica ROWS_PER_BATCH (con el valor > 0) el servidor utiliza este valor para optimizar la operación de importación masiva.If you specify ROWS_PER_BATCH (with a value > 0) the server uses this value to optimize the bulk-import operation. El valor especificado para ROWS_PER_BATCH debe ser aproximadamente el mismo que el número real de filas.The value specified for ROWS_PER_BATCH should approximately the same as the actual number of rows. Para obtener información acerca de consideraciones de rendimiento, vea la sección "Comentarios" más adelante en este tema.For information about performance considerations, see "Remarks," later in this topic.

TABLOCKTABLOCK
Especifica que se obtiene un bloqueo de tabla durante la operación de importación masiva.Specifies that a table-level lock is acquired for the duration of the bulk-import operation. Varios clientes pueden cargar una tabla simultáneamente si ésta no tiene índices y se especifica TABLOCK.A table can be loaded concurrently by multiple clients if the table has no indexes and TABLOCK is specified. De forma predeterminada, el comportamiento del bloqueo viene determinado por la opción de tabla table lock on bulk load.By default, locking behavior is determined by the table option table lock on bulk load. Al mantener un bloqueo durante la operación de importación masiva, se reduce la contención por bloqueos de la tabla y en algunos casos puede mejorarse notablemente el rendimiento.Holding a lock for the duration of the bulk-import operation reduces lock contention on the table, in some cases can significantly improve performance. Para obtener información acerca de consideraciones de rendimiento, vea la sección "Comentarios" más adelante en este tema.For information about performance considerations, see "Remarks," later in this topic.

Para el índice de almacén de columnas,For columnstore index. el comportamiento de bloqueo es diferente porque se divide internamente en varios conjuntos de filas.the locking behaviour is different because it is internally divided into multiple rowsets. Cada subproceso carga datos exclusivamente en cada conjunto de filas aplicando un bloqueo X en el conjunto de filas, lo que permite cargar datos en paralelo con las sesiones de carga de datos que se están realizando al mismo tiempo.Each thread loads data exclusively into each rowset by taking a X lock on the rowset allowing parallel data load with concurrent data load sessions. El uso de la opción TABLOCK hará que el subproceso realice un bloqueo X en la tabla (a diferencia del bloqueo de actualización masiva para conjuntos de filas tradicionales) que impedirá que otros subprocesos simultáneos carguen datos al mismo tiempo.The use of TABLOCK option will cause thread to take an X lock on the table (unlike BU lock for traditional rowsets) which will prevent other concurrent threads to load data concurrently.

Opciones de formato de archivos de entradaInput file format options

FORMAT = 'CSV'FORMAT = 'CSV'
Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
Especifica un archivo de valores separados por comas conforme a la norma RFC 4180.Specifies a comma separated values file compliant to the RFC 4180 standard.

BULK INSERT Sales.Orders
FROM '\\SystemX\DiskZ\Sales\data\orders.csv'
WITH ( FORMAT='CSV');

FIELDQUOTE = 'field_quote'FIELDQUOTE = 'field_quote'
Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
Especifica un carácter que se usará como carácter de comillas en el archivo CSV.Specifies a character that will be used as the quote character in the CSV file. Si no se especifica, se usará el carácter de comillas (") como carácter de comillas, según define la norma RFC 4180.If not specified, the quote character (") will be used as the quote character as defined in the RFC 4180 standard.

FORMATFILE = 'format_file_path'FORMATFILE = 'format_file_path'
Especifica la ruta de acceso completa de un archivo de formato.Specifies the full path of a format file. Un archivo de formato describe el archivo de datos que contiene respuestas almacenadas creado con la utilidad bcp en la misma tabla o vista.A format file describes the data file that contains stored responses created by using the bcp utility on the same table or view. Se debe usar el archivo de formato si:The format file should be used if:

  • El archivo de datos contiene un número de columnas mayor o menor que la tabla o vista.The data file contains greater or fewer columns than the table or view.

  • Las columnas están en un orden diferente.The columns are in a different order.

  • Los delimitadores de columna varían.The column delimiters vary.

  • Hay otros cambios en el formato de los datos.There are other changes in the data format. Los archivos de formato se suelen crear con la utilidad bcp y se modifican con un procesador de texto si es necesario.Format files are typically created by using the bcp utility and modified with a text editor as needed. Para obtener más información, consulte bcp Utility.For more information, see bcp Utility.

Se aplica a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.
A partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, format_file_path puede estar en Azure Blob Storage.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, the format_file_path can be in Azure blob storage.

FIELDTERMINATOR =' field_terminator 'FIELDTERMINATOR ='field_terminator'
Especifica el terminador de campo que se va a usar para archivos de datos de tipo char y widechar.Specifies the field terminator to be used for char and widechar data files. El terminador de campo predeterminado es \t (tabulador).The default field terminator is \t (tab character). Para obtener más información, vea Especificar terminadores de campo y de fila (SQL Server).For more information, see Specify Field and Row Terminators (SQL Server).

ROWTERMINATOR =' row_terminator 'ROWTERMINATOR ='row_terminator'
Especifica el terminador de fila que se va a usar para archivos de datos de tipo char y widechar.Specifies the row terminator to be used for char and widechar data files. El terminador de fila predeterminado es \r\n (carácter de nueva línea).The default row terminator is \r\n (newline character). Para obtener más información, vea Especificar terminadores de campo y de fila (SQL Server).For more information, see Specify Field and Row Terminators (SQL Server).

CompatibilidadCompatibility

BULK INSERT aplica una estricta validación y comprobación de los datos leídos de un archivo que pueden dar lugar a errores en los scripts existentes cuando se ejecutan en datos no válidos.BULK INSERT enforces strict data validation and data checks of data read from a file that could cause existing scripts to fail when they are executed on invalid data. Por ejemplo, BULK INSERT comprueba que:For example, BULK INSERT verifies that:

  • Las representaciones nativas de los tipos de datos float o real son válidas.The native representations of float or real data types are valid.

  • Los datos Unicode tienen una longitud de bytes uniforme.Unicode data has an even-byte length.

Tipos de datosData Types

Conversiones de tipos de datos de cadena a decimalString-to-Decimal Data Type Conversions

Las conversiones de tipos de datos de cadena a decimal usadas en BULK INSERT siguen las mismas reglas que la función CONVERT de Transact-SQLTransact-SQL, que rechaza las cadenas que representan valores numéricos con notación científica.The string-to-decimal data type conversions used in BULK INSERT follow the same rules as the Transact-SQLTransact-SQL CONVERT function, which rejects strings representing numeric values that use scientific notation. Por lo tanto, BULK INSERT trata esas cadenas como valores no válidos y genera errores de conversión.Therefore, BULK INSERT treats such strings as invalid values and reports conversion errors.

Para solucionar este comportamiento, use un archivo de formato para la importación masiva de datos de tipo float con notación científica en una columna con valores decimales.To work around this behavior, use a format file to bulk import scientific notation float data into a decimal column. En el archivo de formato, describa explícitamente la columna como de datos real o float.In the format file, explicitly describe the column as real or float data. Para más información sobre estos tipos de datos, vea float y real (Transact-SQL).For more information about these data types, see float and real (Transact-SQL).

Nota

Los archivos de formato representan datos real como el tipo de datos SQLFLT4 y datos float como el tipo de datos SQLFLT8.Format files represent real data as the SQLFLT4 data type and float data as the SQLFLT8 data type. Para más información sobre archivos de formato distintos de XML, vea Especificar el tipo de almacenamiento de archivos mediante bcp (SQL Server).For information about non-XML format files, see Specify File Storage Type by Using bcp (SQL Server).

Ejemplo de importación de un valor numérico que utiliza notación científicaExample of Importing a Numeric Value that Uses Scientific Notation

En este ejemplo se utiliza la siguiente tabla:This example uses the following table:

CREATE TABLE t_float(c1 float, c2 decimal (5,4));  

El usuario desea importar masivamente datos en la tabla t_float.The user wants to bulk import data into the t_float table. El archivo de datos (C:\t_float-c.dat) contiene datos float con notación científica; por ejemplo:The data file, C:\t_float-c.dat, contains scientific notation float data; for example:

8.0000000000000002E-28.0000000000000002E-2  

No obstante, BULK INSERT no puede importar estos datos directamente en t_float, ya que su segunda columna, c2, utiliza el tipo de datos decimal.However, BULK INSERT cannot import this data directly into t_float, because its second column, c2, uses the decimal data type. Por lo tanto, es necesario un archivo de formato.Therefore, a format file is necessary. El archivo de formato debe asignar los datos float con notación científica al formato decimal de la columna c2.The format file must map the scientific notation float data to the decimal format of column c2.

El siguiente archivo de formato utiliza el tipo de datos SQLFLT8 para asignar el segundo campo de datos a la segunda columna:The following format file uses the SQLFLT8 data type to map the second data field to the second column:

<?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="30"/> 
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="30"/>  </RECORD>  <ROW> 
<COLUMN SOURCE="1" NAME="c1" xsi:type="SQLFLT8"/> 
<COLUMN SOURCE="2" NAME="c2" xsi:type="SQLFLT8"/>  </ROW> </BCPFORMAT> 

Para utilizar este archivo de formato (con el nombre de archivo C:\t_floatformat-c-xml.xml) para importar los datos de prueba en la tabla de prueba, emita la siguiente instrucción de Transact-SQLTransact-SQL:To use this format file (using the file name C:\t_floatformat-c-xml.xml) to import the test data into the test table, issue the following Transact-SQLTransact-SQL statement:

BULK INSERT bulktest..t_float  
FROM 'C:\t_float-c.dat' WITH (FORMATFILE='C:\t_floatformat-c-xml.xml');  
GO  

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

Tipos de datos para importar o exportar masivamente documentos SQLXMLData Types for Bulk Exporting or Importing SQLXML Documents

Para importar o exportar de forma masiva datos SQLXML, utilice uno de los tipos de datos siguientes en el archivo de formato:To bulk export or import SQLXML data, use one of the following data types in your format file:

Tipo de datosData type EfectoEffect
SQLCHAR o SQLVARCHARSQLCHAR or SQLVARCHAR Los datos se envían a la página de códigos del cliente o a la página de códigos implícita por la intercalación.The data is sent in the client code page or in the code page implied by the collation). El efecto es el mismo que si se especifica DATAFILETYPE ='char' sin especificar un archivo de formato.The effect is the same as specifying the DATAFILETYPE ='char' without specifying a format file.
SQLNCHAR o SQLNVARCHARSQLNCHAR or SQLNVARCHAR Los datos se envían como datos Unicode.The data is sent as Unicode. El efecto es el mismo que si se especifica DATAFILETYPE = 'widechar' sin especificar un archivo de formato.The effect is the same as specifying the DATAFILETYPE = 'widechar' without specifying a format file.
SQLBINARY o SQLVARBINSQLBINARY or SQLVARBIN Los datos se envían sin realizar ninguna conversión.The data is sent without any conversion.
   

Notas generalesGeneral Remarks

Para obtener una comparación de la instrucción BULK INSERT, la instrucción INSERT ... Para saber más sobre la instrucción SELECT * FROM OPENROWSET(BULK...) y el comando bcp, vea Importar y exportar datos de forma masiva (SQL Server).For a comparison of the BULK INSERT statement, the INSERT ... SELECT * FROM OPENROWSET(BULK...) statement, and the bcp command, see Bulk Import and Export of Data (SQL Server).

Para más información sobre cómo preparar datos para importaciones masivas, vea Preparar los datos para exportar o importar de forma masiva (SQL Server).For information about preparing data for bulk import, see Prepare Data for Bulk Export or Import (SQL Server).

La instrucción BULK INSERT se puede ejecutar en una transacción definida por el usuario para importar datos en una tabla o una vista.The BULK INSERT statement can be executed within a user-defined transaction to import data into a table or view. Opcionalmente, para utilizar varias coincidencias para la importación masiva de datos, una transacción puede especificar la cláusula BATCHSIZE en la instrucción BULK INSERT.Optionally, to use multiple matches for bulk importing data, a transaction can specify the BATCHSIZE clause in the BULK INSERT statement. Si una transacción de varios lotes se revierte, cada lote que la transacción ha enviado a SQL ServerSQL Server se revierte.If a multiple-batch transaction is rolled back, every batch that the transaction has sent to SQL ServerSQL Server is rolled back.

InteroperabilidadInteroperability

Importar datos desde un archivo CSVImporting Data from a CSV file

A partir de SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, BULK INSERT admite el formato CSV.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, BULK INSERT supports the CSV format.
Antes de SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, las operaciones de importación masiva SQL ServerSQL Server no admiten archivos de valores separados por comas (CSV).Before SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, comma-separated value (CSV) files are not supported by SQL ServerSQL Server bulk-import operations. Sin embargo, en algunos casos se puede utilizar un archivo de valores separados por comas (CSV) como archivo de datos para una importación masiva de datos en SQL ServerSQL Server.However, in some cases, a CSV file can be used as the data file for a bulk import of data into SQL ServerSQL Server. Para conocer los requisitos para importar datos desde un archivo de datos CSV, vea Preparar los datos para exportar o importar de forma masiva (SQL Server).For information about the requirements for importing data from a CSV data file, see Prepare Data for Bulk Export or Import (SQL Server).

Comportamiento del registroLogging Behavior

Para obtener más información sobre cuándo se incluyen en el registro de transacciones las operaciones de inserción de filas que se efectúan durante una importación en bloque, vea Requisitos previos para el registro mínimo durante la importación en bloque.For information about when row-insert operations that are performed by bulk import are logged in the transaction log, see Prerequisites for Minimal Logging in Bulk Import.

RestriccionesRestrictions

Cuando se usa un archivo de formato con BULK INSERT, solo se puede especificar un máximo de 1024 campos.When using a format file with BULK INSERT, you can specify up to 1024 fields only. Es el mismo número máximo de columnas permitido en una tabla.This is same as the maximum number of columns allowed in a table. Si usa BULK INSERT con un archivo de datos que contenga más de 1024 campos, BULK INSERT genera el error 4822.If you use BULK INSERT with a data file that contains more than 1024 fields, BULK INSERT generates the 4822 error. La utilidad bcp no tiene esta limitación, por lo que para los archivos de datos que contengan más de 1024 campos, use el comando bcp.The bcp utility does not have this limitation, so for data files that contain more than 1024 fields, use the bcp command.

Consideraciones de rendimientoPerformance Considerations

Si el número de páginas que van a vaciarse en un único lote supera un umbral interno, podría producirse un examen completo del grupo de búferes para identificar qué páginas se han de vaciar cuando el lote se confirme.If the number of pages to be flushed in a single batch exceeds an internal threshold, a full scan of the buffer pool might occur to identify which pages to flush when the batch commits. Este examen completo puede afectar de forma desfavorable al rendimiento de la importación masiva.This full scan can hurt bulk-import performance. Un caso en el que es probable que se supere el umbral interno se produce cuando un grupo de búferes grande se combina con un subsistema de E/S lento.A likely case of exceeding the internal threshold occurs when a large buffer pool is combined with a slow I/O subsystem. Para evitar los desbordamientos del búfer en equipos grandes, no utilice la sugerencia TABLOCK (que quita la optimización masiva) o use un tamaño de lote menor (que la preserva).To avoid buffer overflows on large machines, either do not use the TABLOCK hint (which will remove the bulk optimizations) or use a smaller batch size (which preserves the bulk optimizations).

Dado que los equipos varían, es recomendable que pruebe varios tamaños de lote con la carga de datos para averiguar lo que funciona mejor en su caso.Because computers vary, we recommend that you test various batch sizes with your data load to find out what works best for you.

SeguridadSecurity

Delegación de cuentas de seguridad (suplantación)Security Account Delegation (Impersonation)

Si un usuario utiliza un inicio de sesión de SQL ServerSQL Server , se utilizará el perfil de seguridad de la cuenta de proceso de SQL ServerSQL Server .If a user uses a SQL ServerSQL Server login, the security profile of the SQL ServerSQL Server process account is used. Un inicio de sesión que use autenticación de SQL Server no se puede autenticar fuera del Motor de base de datos.A login using SQL Server authentication cannot be authenticated outside of the Database Engine. Por tanto, cuando un inicio de sesión que usa autenticación de SQL Server inicia un comando BULK INSERT, la conexión con los datos se realiza usando el contexto de seguridad de la cuenta de proceso de SQL Server (la cuenta usada por el servicio Motor de base de datos de SQL Server).Therefore, when a BULK INSERT command is initiated by a login using SQL Server authentication, the connection to the data is made using the security context of the SQL Server process account (the account used by the SQL Server Database Engine service). Para leer correctamente los datos de origen, debe conceder acceso a los datos de origen a la cuenta usada por el Motor de base de datos de SQL Server. Por el contrario, si un usuario de SQL ServerSQL Server inicia sesión con autenticación de Windows, el usuario solo puede leer aquellos archivos a los que tenga acceso la cuenta de usuario, cualquiera que sea el perfil de seguridad del proceso de SQL ServerSQL Server.To successfully read the source data you must grant the account used by the SQL Server Database Engine, access to the source data.In contrast, if a SQL ServerSQL Server user logs on by using Windows Authentication, the user can read only those files that can be accessed by the user account, regardless of the security profile of the SQL ServerSQL Server process.

Es posible que reciba un error 4861 si ejecuta la instrucción BULK INSERT usando sqlcmd o osql desde un equipo, insertando datos en SQL ServerSQL Server en otro equipo y especificando data_file en un tercer equipo mediante una ruta de acceso UNC.When executing the BULK INSERT statement by using sqlcmd or osql, from one computer, inserting data into SQL ServerSQL Server on a second computer, and specifying a data_file on third computer by using a UNC path, you may receive a 4861 error.

Para resolver este error, use la autenticación de SQL ServerSQL Server y especifique un inicio de sesión de SQL ServerSQL Server que use el perfil de seguridad de la cuenta del proceso de SQL ServerSQL Server, o bien configure Windows para habilitar la delegación de la cuenta de seguridad.To resolve this error, use SQL ServerSQL Server Authentication and specify a SQL ServerSQL Server login that uses the security profile of the SQL ServerSQL Server process account, or configure Windows to enable security account delegation. Para obtener información acerca de cómo habilitar una cuenta de usuario para que sea de confianza para la delegación, vea la Ayuda de Windows.For information about how to enable a user account to be trusted for delegation, see Windows Help.

Para más información sobre esto y otras consideraciones de seguridad, vea Importación en bloque de datos mediante las instrucciones BULK INSERT u OPENROWSET(BULK...) (SQL Server).For more information about this and other security considerations for using BULK INSERT, see Import Bulk Data by Using BULK INSERT or OPENROWSET(BULK...) (SQL Server).

PermisosPermissions

Se requieren los permisos INSERT y ADMINISTER BULK OPERATIONS.Requires INSERT and ADMINISTER BULK OPERATIONS permissions. En Azure SQL Database, se necesitan los permisos INSERT y ADMINISTER DATABASE BULK OPERATIONS.In Azure SQL Database, INSERT and ADMINISTER DATABASE BULK OPERATIONS permissions are required. Además, es necesario el permiso ALTER TABLE si se da una o varias de las siguientes circunstancias:Additionally, ALTER TABLE permission is required if one or more of the following is true:

  • Existen restricciones y no se ha especificado la opción CHECK_CONSTRAINTS.Constraints exist and the CHECK_CONSTRAINTS option is not specified.

    Nota

    La deshabilitación de restricciones es el comportamiento predeterminado.Disabling constraints is the default behavior. Para comprobar las restricciones CHECK explícitamente, utilice la opción CHECK_CONSTRAINTS.To check constraints explicitly, use the CHECK_CONSTRAINTS option.

  • Existen desencadenadores y no se ha especificado la opción FIRE_TRIGGER.Triggers exist and the FIRE_TRIGGER option is not specified.

    Nota

    De forma predeterminada, los desencadenadores no se activan.By default, triggers are not fired. Para activar los desencadenadores explícitamente, use la opción FIRE_TRIGGER.To fire triggers explicitly, use the FIRE_TRIGGER option.

  • Se utiliza la opción KEEPIDENTITY para importar el valor de identidad de un archivo de datos.You use the KEEPIDENTITY option to import identity value from data file.

EjemplosExamples

A.A. Usar canalizaciones para importar datos de un archivoUsing pipes to import data from a file

En el siguiente ejemplo se importa información detallada de pedidos en la tabla AdventureWorks2012.Sales.SalesOrderDetail desde un archivo de datos especificado utilizando una canalización (|) como el terminador de campo y |\n como el terminador de fila.The following example imports order detail information into the AdventureWorks2012.Sales.SalesOrderDetail table from the specified data file by using a pipe (|) as the field terminator and |\n as the row terminator.

BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail  
   FROM 'f:\orders\lineitem.tbl'  
   WITH   
      (  
         FIELDTERMINATOR =' |',  
         ROWTERMINATOR =' |\n'  
      );  

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

B.B. Usar el argumento FIRE_TRIGGERSUsing the FIRE_TRIGGERS argument

En el ejemplo siguiente se especifica el argumento FIRE_TRIGGERS.The following example specifies the FIRE_TRIGGERS argument.

BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail  
   FROM 'f:\orders\lineitem.tbl'  
   WITH  
     (  
        FIELDTERMINATOR =' |',  
        ROWTERMINATOR = ':\n',  
        FIRE_TRIGGERS  
      );  

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

C.C. Usar el salto de línea como terminador de filaUsing line feed as a row terminator

En el siguiente ejemplo se importa un archivo que utiliza el salto de línea como terminador de fila, igual que en una salida de UNIX:The following example imports a file that uses the line feed as a row terminator such as a UNIX output:

DECLARE @bulk_cmd varchar(1000);  
SET @bulk_cmd = 'BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail  
FROM ''<drive>:\<path>\<filename>''   
WITH (ROWTERMINATOR = '''+CHAR(10)+''')';  
EXEC(@bulk_cmd);  

Nota

Debido al modo en que Microsoft Windows trata los archivos de texto, (\n se reemplaza automáticamente por \r\n) .Due to how Microsoft Windows treats text files (\n automatically gets replaced with \r\n).

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

D.D. Especificar una página de códigosSpecifying a code page

En este ejemplo se muestra cómo especificar una página de código.The following example show how to specify a code page.

BULK INSERT MyTable  
FROM 'D:\data.csv'  
WITH  
( CODEPAGE = '65001',  
    DATAFILETYPE = 'char',  
    FIELDTERMINATOR = ','  
);  

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

E.E. Importar datos desde un archivo CSVImporting data from a CSV file

En el ejemplo siguiente se muestra cómo especificar un archivo CSV, omitir el encabezado (primera fila), utilizar ; como terminador de campo y 0x0a como terminador de línea:The following example show how to specify a CSV file, skipping the header (first row), using ; as field terminator and 0x0a as line terminator:

BULK INSERT Sales.Invoices
FROM '\\share\invoices\inv-2016-07-25.csv'
WITH (FORMAT = 'CSV',
      FIRSTROW=2,
      FIELDQUOTE = '\',
      FIELDTERMINATOR = ';', 
      ROWTERMINATOR = '0x0a'); 

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

F.F. Importar datos desde un archivo en Azure Blog StorageImporting data from a file in Azure blob storage

En este ejemplo se muestra cómo cargar datos desde un archivo csv en una ubicación de Azure Blob Storage, que se ha configurado como un origen de datos externo.The following example shows how to load data from a csv file in an Azure blob storage location, which has been configured as an external data source. Para hacerlo, se necesita una credencial de ámbito de base de datos que use una firma de acceso compartido.This requires a database scoped credential using a shared access signature.

CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential 
 WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
 SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';
 
 -- NOTE: Make sure that you don't have a leading ? in SAS token, and
 -- that you have at least read permission on the object that should be loaded srt=o&sp=r, and
 -- that expiration period is valid (all dates are in UTC time)

CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (  TYPE = BLOB_STORAGE, 
        LOCATION = 'https://****************.blob.core.windows.net/invoices', 
        CREDENTIAL= MyAzureBlobStorageCredential    --> CREDENTIAL is not required if a blob has public access!
);

BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (DATA_SOURCE = 'MyAzureBlobStorage'); 

Importante

Azure SQL Database no admite la lectura de archivos de Windows.Azure SQL Database does not support reading from Windows files.

G.G. Importar datos desde un archivo en Azure Blob Storage y especificar un archivo de errorImporting data from a file in Azure blob storage and specifying an error file

En este ejemplo se muestra cómo cargar datos desde un archivo csv en una ubicación de Azure Blob Storage, que se ha configurado como un origen de datos externo, y también cómo especificar un archivo de error.The following example shows how to load data from a csv file in an Azure blob storage location, which has been configured as an external data source and also specifying an error file. Para hacerlo, se necesita una credencial de ámbito de base de datos que use una firma de acceso compartido.This requires a database scoped credential using a shared access signature. Observe que si se ejecuta en Azure SQL Database, la opción ERRORFILE debe ir acompañada de ERRORFILE_DATA_SOURCE; de lo contrario, la importación podría presentar un error de permisos.Note that if running on Azure SQL Database, ERRORFILE option should be accompanied by ERRORFILE_DATA_SOURCE otherwise the import might fail with permissions error. El archivo especificado en ERRORFILE no debe existir en el contenedor.The file specified in ERRORFILE should not exist in the container.

BULK INSERT Sales.Invoices
FROM 'inv-2017-12-08.csv'
WITH (DATA_SOURCE = 'MyAzureInvoices',
     FORMAT = 'CSV',
     ERRORFILE = 'MyErrorFile',
     ERRORFILE_DATA_SOURCE = 'MyAzureInvoices'); 

Para ver ejemplos completos de BULK INSERT, incluido cómo configurar la credencial y el origen de datos externo, vea Ejemplos de acceso masivo a datos en Azure Blob Storage.For complete BULK INSERT examples including configuring the credential and external data source, see Examples of Bulk Access to Data in Azure Blob Storage.

Otros ejemplosAdditional Examples

Se proporcionan otros ejemplos de BULK INSERT en estos temas:Other BULK INSERT examples are provided in the following topics:

Consulte tambiénSee Also

Importar y exportar datos en bloque (SQL Server) Bulk Import and Export of Data (SQL Server)
bcp (utilidad) bcp Utility
Archivos de formato para importar o exportar datos (SQL Server) Format Files for Importing or Exporting Data (SQL Server)
INSERT (Transact-SQL) INSERT (Transact-SQL)
OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
Preparar los datos para exportar o importar en bloque (SQL Server) Prepare Data for Bulk Export or Import (SQL Server)
sp_tableoption (Transact-SQL)sp_tableoption (Transact-SQL)