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

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Importa um arquivo de dados para uma tabela ou exibição de banco de dados em um formato especificado pelo usuário no SQL ServerSQL ServerImports a data file into a database table or view in a user-specified format in SQL ServerSQL Server

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

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' } ]
   [ [ , ] DATA_SOURCE = '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_name É o nome do banco de dados no qual a tabela ou a exibição especificada reside.database_name Is the database name in which the specified table or view resides. Se não for especificado, ele será o banco de dados atual.If not specified, this is the current database.

schema_name É o nome do esquema da tabela ou exibição.schema_name Is the name of the table or view schema. schema_name será opcional se o esquema padrão do usuário que está executando a operação de importação em massa for o esquema da tabela ou exibição 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. Se schema não for especificado e o esquema padrão do usuário que está executando a operação de importação em massa for diferente da tabela ou exibição especificada, o SQL ServerSQL Server retornará uma mensagem de erro e a operação de importação em massa será cancelada.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_name É o nome da tabela ou da exibição para a qual os dados serão importados em massa.table_name Is the name of the table or view to bulk import data into. Só podem ser usadas exibições nas quais todas as colunas se referem à mesma tabela base.Only views in which all columns refer to the same base table can be used. Para obter mais informações sobre as restrições para carregar dados em exibições, veja INSERT (Transact-SQL).For more information about the restrictions for loading data into views, see INSERT (Transact-SQL).

' data_file ' É o caminho completo do arquivo de dados que contém os dados a serem importados para a tabela ou a exibição especificada.' data_file ' Is the full path of the data file that contains data to import into the specified table or view. BULK INSERT pode importar dados de um disco ou do Armazenamento de Blobs do Azure (incluindo rede, disco flexível, disco rígido e assim por diante).BULK INSERT can import data from a disk or Azure Blob storage (including network, floppy disk, hard disk, and so on).

data_file deve especificar um caminho válido do servidor no qual o SQL ServerSQL Server é executado.data_file must specify a valid path from the server on which SQL ServerSQL Server is running. Se data_file for um arquivo remoto, especifique o nome UNC.If data_file is a remote file, specify the Universal Naming Convention (UNC) name. Um nome UNC tem a forma \\Systemname\ShareName\Path\FileName.A UNC name has the form \\Systemname\ShareName\Path\FileName. Por exemplo:For example:

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

Aplica-se a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 e Banco de Dados SQL do Azure.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 and Azure SQL Database. Começando com o SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP1.1, o data_file pode estar localizado no Armazenamento de Blobs do Azure.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP1.1, the data_file can be in Azure blob storage. Nesse caso, você precisa especificar a opção data_source_name.In that case, you need to specify data_source_name option. Para obter um exemplo, confira Como importar dados de um arquivo no Armazenamento de Blobs do Azure.For an example, see Importing data from a file in Azure blob storage.

Importante

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

' data_source_name ' Aplica-se a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 e Banco de Dados SQL do Azure.' data_source_name ' Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 and Azure SQL Database. É uma fonte de dados externa nomeada apontando para o local de Armazenamento de Blobs do Azure do arquivo que será importado.Is a named external data source pointing to the Azure Blob storage location of the file that will be imported. A fonte de dados externa deve ser criada usando a opção TYPE = BLOB_STORAGE adicionada no 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 obter mais informações, consulte CREATE EXTERNAL DATA SOURCE.For more information, see CREATE EXTERNAL DATA SOURCE. Para obter um exemplo, confira Como importar dados de um arquivo no Armazenamento de Blobs do Azure.For an example, see Importing data from a file in Azure blob storage.

BATCHSIZE = batch_size Especifica o número de linhas em um lote.BATCHSIZE =batch_size Specifies the number of rows in a batch. Cada lote é copiado para o servidor como uma transação.Each batch is copied to the server as one transaction. Em caso de falha, o SQL ServerSQL Server confirmará ou reverterá a transação para cada lote.If this fails, SQL ServerSQL Server commits or rolls back the transaction for every batch. Por padrão, todos os dados no arquivo de dados especificado são um lote.By default, all data in the specified data file is one batch. Para obter informações sobre considerações de desempenho, consulte “Comentários”, posteriormente neste tópico.For information about performance considerations, see "Remarks," later in this topic.

CHECK_CONSTRAINTS Especifica que todas as restrições na tabela ou na exibição de destino precisam ser verificadas durante a operação de importação em massa.CHECK_CONSTRAINTS Specifies that all constraints on the target table or view must be checked during the bulk-import operation. Sem a opção CHECK_CONSTRAINTS, quaisquer restrições CHECK e FOREIGN KEY são ignoradas e, depois da operação, a restrição na tabela é marcada como não confiável.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.

Observação

As restrições UNIQUE e PRIMARY KEY são sempre impostas.UNIQUE, and PRIMARY KEY constraints are always enforced. Durante a importação para uma coluna de caracteres que é definida com uma restrição NOT NULL, BULK INSERT insere uma cadeia de caracteres em branco quando não há um valor no arquivo 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.

Em algum momento, você deve examinar as restrições na tabela inteira.At some point, you must examine the constraints on the whole table. Se a tabela não estiver vazia antes da operação de importação em massa, o custo de revalidação da restrição poderá exceder o custo da aplicação de restrições CHECK aos dados incrementais.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.

Uma situação na qual talvez você queira desabilitar as restrições (o comportamento padrão) é quando os dados de entrada contiverem linhas que violam as restrições.A situation in which you might want constraints disabled (the default behavior) is if the input data contains rows that violate constraints. Com as restrições CHECK desabilitadas, é possível importar os dados e usar instruções Transact-SQLTransact-SQL para remover os dados inválidos.With CHECK constraints disabled, you can import the data and then use Transact-SQLTransact-SQL statements to remove the invalid data.

Observação

A opção de MAXERRORS não se aplica à verificação de restrição.The MAXERRORS option does not apply to constraint checking.

CODEPAGE = { ' ACP ' | ' OEM ' | ' RAW ' | ' code_page ' } Especifica a página de código dos dados no arquivo de dados.CODEPAGE = { ' ACP ' | ' OEM ' | ' RAW ' | 'code_page' } Specifies the code page of the data in the data file. CODEPAGE só será relevante se os dados contiverem colunas char, varchar ou text com valores de caractere maiores que 127 ou 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. Para obter um exemplo, confira Como especificar uma página de código.For an example, see Specifying a code page.

Importante

CODEPAGE não é uma opção compatível no Linux para 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 SQL Server 2019 (15.x)SQL Server 2019 (15.x), somente a opção 'RAW' é permitida para CODEPAGE.For SQL Server 2019 (15.x)SQL Server 2019 (15.x), only the 'RAW' option is allowed for CODEPAGE.

Observação

A MicrosoftMicrosoft recomenda que você especifique um nome de ordenação para cada coluna em um arquivo de formato.MicrosoftMicrosoft recommends that you specify a collation name for each column in a format file.

Valor de CODEPAGECODEPAGE value DescriçãoDescription
ACPACP Colunas do tipo de dados char, varchar ou text são convertidas da página de código do Windows ANSIANSI/MicrosoftMicrosoft (ISO 1252) na página de código do 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 (padrão)OEM (default) Colunas do tipo de dados char, varchar ou text são convertidas da página de código de OEM do sistema para a página de código 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 Nenhuma conversão de uma página de código em outra ocorre; essa opção é a mais rápida.No conversion from one code page to another occurs; this is the fastest option.
code_pagecode_page Especifique o número da página de código, por exemplo, 850.Specific code page number, for example, 850.

** Importante ** As versões anteriores à SQL Server 2016 (13.x)SQL Server 2016 (13.x) não são compatíveis com a página de código 65001 (codificação 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' } Especifica que BULK INSERT executa a operação de importação usando o valor do tipo de arquivo de dados especificado.DATAFILETYPE = { 'char' | 'native' | 'widechar' | 'widenative' } Specifies that BULK INSERT performs the import operation using the specified data-file type value.

 

Valor DATAFILETYPEDATAFILETYPE value Todos os dados representados em:All data represented in:
char (padrão)char (default) Formato de caractere.Character format.

Para obter mais informações, veja Usar o formato de caractere para importar ou exportar dados (SQL Server).For more information, see Use Character Format to Import or Export Data (SQL Server).
nativenative Tipos de dados (banco de dados) nativo.Native (database) data types. Crie o arquivo de dados nativo importando dados em massa do SQL ServerSQL Server usando o utilitário bcp.Create the native data file by bulk importing data from SQL ServerSQL Server using the bcp utility.

O valor nativo oferece uma alternativa de alto desempenho ao valor char.The native value offers a higher performance alternative to the char value. O formato nativo é recomendado quando você transfere dados em massa entre várias instâncias do SQL Server usando um arquivo de dados que não contém caracteres estendidos/DBCS (conjunto de caracteres de byte duplo).Native format is recommended when you bulk transfer data between multiple instances of SQL Server using a data file that does not contain any extended/double-byte character set (DBCS) characters.

Para obter mais informações, veja Usar o formato nativo para importar ou exportar dados (SQL Server).For more information, see Use Native Format to Import or Export Data (SQL Server).
widecharwidechar Caracteres unicode.Unicode characters.

Para obter mais informações, consulte Usar o formato de caractere Unicode para importar ou exportar dados (SQL Server).For more information, see Use Unicode Character Format to Import or Export Data (SQL Server).
widenativewidenative Tipos de dados nativos (banco de dados), exceto nas colunas char, varchar e text colunas, em que os dados são armazenados como Unicode.Native (database) data types, except in char, varchar, and text columns, in which data is stored as Unicode. Crie o arquivo de dados widenative importando dados em massa do SQL ServerSQL Server usando o utilitário bcp.Create the widenative data file by bulk importing data from SQL ServerSQL Server using the bcp utility.

O valor widenative oferece uma alternativa de alto desempenho para widechar.The widenative value offers a higher performance alternative to widechar. Se o arquivo de dados contiver caracteres ANSIANSI estendidos, especifique widenative.If the data file contains ANSIANSI extended characters, specify widenative.

Para obter mais informações, veja Usar o formato nativo Unicode para importar ou exportar dados (SQL Server).For more information, see Use Unicode Native Format to Import or Export Data (SQL Server).
   

ERRORFILE =' file_name ' Especifica o arquivo usado para coletar linhas com erros de formatação e que não podem ser convertidas em um conjunto de linhas OLE DB.ERRORFILE ='file_name' Specifies the file used to collect rows that have formatting errors and cannot be converted to an OLE DB rowset. Essas linhas são copiadas do arquivo de dados para esse arquivo de erro "no estado em que se encontram".These rows are copied into this error file from the data file "as is."

O arquivo de erro é criado quando o comando é executado.The error file is created when the command is executed. Ocorrerá um erro se o arquivo já existir.An error occurs if the file already exists. Além disso, é criado um arquivo de controle com a extensão .ERROR.txt.Additionally, a control file that has the extension .ERROR.txt is created. Ele faz referência a cada linha do arquivo de erro e fornece um diagnóstico de erros.This references each row in the error file and provides error diagnostics. Assim que os erros forem corrigidos, os dados poderão ser carregados.As soon as the errors have been corrected, the data can be loaded. Aplica-se 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. Começando pelo SQL Server 2017 (14.x)SQL Server 2017 (14.x), o error_file_path pode estar no Armazenamento de Blobs do Azure.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' Aplica-se a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.'errorfile_data_source_name' Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. É uma fonte de dados externa nomeada que aponta para o local de Armazenamento de Blobs do Azure do arquivo de erro que conterá os erros encontrados durante a importação.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. A fonte de dados externa deve ser criada usando a opção TYPE = BLOB_STORAGE adicionada no 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 obter mais informações, consulte CREATE EXTERNAL DATA SOURCE.For more information, see CREATE EXTERNAL DATA SOURCE.

FIRSTROW = primeira_linha Especifica o número da primeira linha a ser carregada.FIRSTROW = first_row Specifies the number of the first row to load. O padrão é a primeira linha no arquivo de dados especificado.The default is the first row in the specified data file. FIRSTROW tem base 1.FIRSTROW is 1-based.

Observação

O atributo FIRSTROW não tem o objetivo de ignorar cabeçalhos de coluna.The FIRSTROW attribute is not intended to skip column headers. Não há suporte para ignorar cabeçalhos por parte da instrução BULK INSERT.Skipping headers is not supported by the BULK INSERT statement. Ao ignorar linhas, o Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine examina somente os terminadores de campo e não valida os dados nos campos das linhas ignoradas.When skipping rows, the Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine looks only at the field terminators, and does not validate the data in the fields of skipped rows.

FIRE_TRIGGERS Especifica que qualquer gatilho de inserção definido na tabela de destino será executado durante a operação de importação em massa.FIRE_TRIGGERS Specifies that any insert triggers defined on the destination table execute during the bulk-import operation. Se os gatilhos forem definidos para operações INSERT na tabela de destino, eles serão disparados para cada lote concluído.If triggers are defined for INSERT operations on the target table, they are fired for every completed batch.

Se FIRE_TRIGGERS não for especificado, nenhum gatilho de inserção será executado.If FIRE_TRIGGERS is not specified, no insert triggers execute.

FORMATFILE_DATASOURCE = 'data_source_name' Aplica-se a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) 1.1.FORMATFILE_DATASOURCE = 'data_source_name' Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) 1.1. É uma fonte de dados externa nomeada que está apontando para o local de Armazenamento de Blobs do Azure do formato de arquivo que define o esquema de dados 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. A fonte de dados externa deve ser criada usando a opção TYPE = BLOB_STORAGE adicionada no 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 obter mais informações, consulte CREATE EXTERNAL DATA SOURCE.For more information, see CREATE EXTERNAL DATA SOURCE.

KEEPIDENTITY Especifica que os valores de identidade no arquivo de dados importado devem ser usados para a coluna de identidade.KEEPIDENTITY Specifies that identity value or values in the imported data file are to be used for the identity column. Se KEEPIDENTITY não for especificado, os valores de identidade dessa coluna serão verificados, mas não importados e o SQL ServerSQL Server atribuirá valores exclusivos automaticamente com base nos valores de semente e de incremento especificados durante a criação da tabela.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. Se o arquivo de dados não contiver valores para a coluna de identidade na tabela ou exibição, use um arquivo de formato para especificar que a coluna de identidade na tabela ou exibição deve ser ignorada ao importar dados. O SQL ServerSQL Server atribui valores exclusivos para a coluna automaticamente.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 obter mais informações, veja DBCC CHECKIDENT (Transact-SQL).For more information, see DBCC CHECKIDENT (Transact-SQL).

Para obter mais informações, veja como manter identificar valores, em Manter valores de identidade ao importar dados em massa (SQL Server).For more information, see about keeping identify values see Keep Identity Values When Bulk Importing Data (SQL Server).

KEEPNULLS Especifica que as colunas vazias devem reter um valor nulo durante a operação de importação em massa, em vez de ter qualquer valor padrão para as colunas inseridas.KEEPNULLS 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 obter mais informações, veja Manter valores nulos ou usar os valores padrão durante a importação em massa (SQL Server).For more information, see Keep Nulls or Use Default Values During Bulk Import (SQL Server).

KILOBYTES_PER_BATCH = kilobytes_per_batch Especifica o número aproximado de KB (kilobytes) de dados por lote como kilobytes_per_batch.KILOBYTES_PER_BATCH = kilobytes_per_batch Specifies the approximate number of kilobytes (KB) of data per batch as kilobytes_per_batch. Por padrão, KILOBYTES_PER_BATCH é desconhecido.By default, KILOBYTES_PER_BATCH is unknown. Para obter informações sobre considerações de desempenho, consulte “Comentários”, posteriormente neste tópico.For information about performance considerations, see "Remarks," later in this topic.

LASTROW = last_row Especifica o número da última linha a ser carregada.LASTROW = last_row Specifies the number of the last row to load. O padrão é 0, que indica a última fila no arquivo de dados especificado.The default is 0, which indicates the last row in the specified data file.

MAXERRORS = max_errors Especifica o número máximo de erros de sintaxe permitido nos dados antes que a operação de importação em massa seja cancelada.MAXERRORS = max_errors Specifies the maximum number of syntax errors allowed in the data before the bulk-import operation is canceled. Cada linha que não pode ser importada pela operação de importação em massa é ignorada e contada como um erro.Each row that cannot be imported by the bulk-import operation is ignored and counted as one error. Se max_errors não for especificado, o padrão será 10.If max_errors is not specified, the default is 10.

Observação

A opção MAX_ERRORS não se aplica a verificações de restrição ou à conversão dos tipos de dados money e bigint.The MAX_ERRORS option does not apply to constraint checks or to converting money and bigint data types.

ORDER ( { column [ ASC | DESC ] } [ , ... n ] ) Especifica como os dados do arquivo de dados são classificados.ORDER ( { column [ ASC | DESC ] } [ ,... n ] ) Specifies how the data in the data file is sorted. O desempenho da importação em massa será melhorado se os dados importados forem armazenados de acordo com o índice clusterizado na tabela, se houver.Bulk import performance is improved if the data being imported is sorted according to the clustered index on the table, if any. Se o arquivo de dados for classificado em outra ordem, ou seja, diferente da ordem de uma chave de índice clusterizado, ou se não houver nenhum índice clusterizado na tabela, a cláusula ORDER será ignorada.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. Os nomes das colunas fornecidos devem ser nomes de colunas válidas na tabela de destino.The column names supplied must be valid column names in the destination table. Por padrão, a operação de inserção em massa supõe que o arquivo de dados não esteja ordenado.By default, the bulk insert operation assumes the data file is unordered. Para obter uma importação em massa otimizada, o SQL ServerSQL Server também valida que os dados importados sejam classificados.For optimized bulk import, SQL ServerSQL Server also validates that the imported data is sorted.

n É um espaço reservado que indica que várias colunas podem ser especificadas.n Is a placeholder that indicates that multiple columns can be specified.

ROWS_PER_BATCH = rows_per_batch Indica o número aproximado de linhas de dados no arquivo de dados.ROWS_PER_BATCH = rows_per_batch Indicates the approximate number of rows of data in the data file.

Por padrão, todos os dados de arquivo são enviados ao servidor como uma única transação, e o número de linhas no lote é desconhecido para o otimizador de consulta.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. Se você especificar ROWS_PER_BATCH (com um valor > 0), o servidor usará esse valor para otimizar a operação da importação em massa.If you specify ROWS_PER_BATCH (with a value > 0) the server uses this value to optimize the bulk-import operation. O valor especificado para ROWS_PER_BATCH deve ser aproximadamente igual ao número real de linhas.The value specified for ROWS_PER_BATCH should approximately the same as the actual number of rows. Para obter informações sobre considerações de desempenho, consulte “Comentários”, posteriormente neste tópico.For information about performance considerations, see "Remarks," later in this topic.

TABLOCK Especifica que um bloqueio no nível de tabela é adquirido durante a operação de importação em massa.TABLOCK Specifies that a table-level lock is acquired for the duration of the bulk-import operation. Uma tabela pode ser carregada simultaneamente através de vários clientes se não tiver nenhum índice e TABLOCK for especificado.A table can be loaded concurrently by multiple clients if the table has no indexes and TABLOCK is specified. Por padrão, o comportamento de bloqueio é determinado pela opção de tabela bloqueio de tabela em carregamento em massa.By default, locking behavior is determined by the table option table lock on bulk load. Manter um bloqueio durante a operação de importação em massa reduz a contenção de bloqueio na tabela e em alguns casos pode melhorar significativamente o desempenho.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 obter informações sobre considerações de desempenho, consulte “Comentários”, posteriormente neste tópico.For information about performance considerations, see "Remarks," later in this topic.

Para o índice columnstore.For columnstore index. o comportamento de bloqueio é diferente, porque ele é dividido internamente em vários conjuntos de linhas. Cada thread carrega dados exclusivamente em cada conjunto de linhas usando um bloqueio X no conjunto de linhas, permitindo o carregamento paralelo de dados com sessões simultâneas de carregamento de dados.the locking behavior is different because it is internally divided into multiple rowsets.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. O uso da opção TABLOCK fará com que o thread pegue um bloqueio X na tabela (diferente do bloqueio BU para conjuntos de linhas tradicionais), o que impedirá que outros threads simultâneos carreguem dados simultaneamente.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.

Opções de formato de arquivo de entradaInput file format options

FORMAT = 'CSV' Aplica-se a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.FORMAT = 'CSV' Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Especifica um arquivo de valores separados por vírgula em conformidade com o padrão 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' Aplica-se a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1.FIELDQUOTE = 'field_quote' Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1. Especifica um caractere que será usado como o caractere de aspas no arquivo CSV.Specifies a character that will be used as the quote character in the CSV file. Se não for especificado, o caractere de aspas (") será usado como o caractere de aspas, conforme definido no padrão 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' Especifica o caminho completo de um arquivo de formato.FORMATFILE = 'format_file_path' Specifies the full path of a format file. Um arquivo de formato descreve o arquivo de dados que contém as respostas armazenadas criadas usando o utilitário bcp na mesma tabela ou exibição.A format file describes the data file that contains stored responses created by using the bcp utility on the same table or view. O arquivo de formato deverá ser usado se:The format file should be used if:

  • O arquivo de dados contiver colunas maiores ou menos colunas que a tabela ou exibição.The data file contains greater or fewer columns than the table or view.
  • As colunas estiverem em uma ordem diferente.The columns are in a different order.
  • Os delimitadores de coluna variarem.The column delimiters vary.
  • Houver outras alterações no formato de dados.There are other changes in the data format. Os arquivos de formato em geral são criados por meio do utilitário bcp e modificados com um editor de texto conforme necessário.Format files are typically created by using the bcp utility and modified with a text editor as needed. Para obter mais informações, confira Utilitário BCP e Criar um arquivo de formato.For more information, see bcp Utility and Create a format file.

Aplica-se a: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 e Banco de Dados SQL do Azure.Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 and Azure SQL Database. Começando com o SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, o format_file_path pode estar localizado no Armazenamento de Blobs do Azure.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 ' Especifica o terminador de campo a ser usado para arquivos de dados char e widechar.FIELDTERMINATOR ='field_terminator' Specifies the field terminator to be used for char and widechar data files. O terminador de campo padrão é \t (caractere de tabulação).The default field terminator is \t (tab character). Para obter mais informações, veja Especificar terminadores de campo e linha (SQL Server).For more information, see Specify Field and Row Terminators (SQL Server).

ROWTERMINATOR =' row_terminator ' Especifica o terminador de linha a ser usado para arquivos de dados char e widechar.ROWTERMINATOR ='row_terminator' Specifies the row terminator to be used for char and widechar data files. O terminador de linha padrão é \r\n (caractere de nova linha).The default row terminator is \r\n (newline character). Para obter mais informações, veja Especificar terminadores de campo e linha (SQL Server).For more information, see Specify Field and Row Terminators (SQL Server).

CompatibilidadeCompatibility

O BULK INSERT impõe validação estrita de dados e verificações de dados lidos de um arquivo que podem provocar falha nos scripts existentes quando executadas com dados invá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 exemplo, BULK INSERT verifica se:For example, BULK INSERT verifies that:

  • As representações nativa dos tipos de dados float ou real são válidas.The native representations of float or real data types are valid.
  • Dados Unicode têm um comprimento regular de byte.Unicode data has an even-byte length.

Tipos de dadosData Types

Conversões do tipo de dados de cadeia de caracteres em decimalString-to-Decimal Data Type Conversions

As conversões do tipo de dados de cadeia de caracteres em decimal usada em BULK INSERT seguem as mesmas regras que a função Transact-SQLTransact-SQL CONVERT, que rejeita cadeias de caracteres que representam valores numéricos que usam notação 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. Portanto, BULK INSERT trata essas cadeias de caracteres como valores inválidos e relata erros de conversão.Therefore, BULK INSERT treats such strings as invalid values and reports conversion errors.

Como solução alternativa para esse comportamento, use um arquivo de formato para importar em massa dados float de notação científica em uma coluna decimal.To work around this behavior, use a format file to bulk import scientific notation float data into a decimal column. No arquivo de formato, descreva explicitamente a coluna como de dados reais ou float.In the format file, explicitly describe the column as real or float data. Para obter mais informações sobre esses tipos de dados, veja float e real (Transact-SQL).For more information about these data types, see float and real (Transact-SQL).

Observação

Arquivos de formato representam dados real como o SQLFLT4 tipo de dados e dados float como o tipo de dados SQLFLT8.Format files represent real data as the SQLFLT4 data type and float data as the SQLFLT8 data type. Para obter informações sobre arquivos de formato não XML, veja Especificar o tipo de armazenamento de arquivos usando bcp (SQL Server).For information about non-XML format files, see Specify File Storage Type by Using bcp (SQL Server).

Exemplo de importação de um valor numérico que usa notação científicaExample of Importing a Numeric Value that Uses Scientific Notation

Este exemplo usa a seguinte tabela:This example uses the following table:

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

O usuário quer importar dados em massa para a tabela t_float.The user wants to bulk import data into the t_float table. O arquivo de dados, C:\t_float-c.dat, contém dados float de notação científica, por exemplo:The data file, C:\t_float-c.dat, contains scientific notation float data; for example:

8.0000000000000002E-28.0000000000000002E-2

Entretanto, BULK INSERT não pode importar esses dados diretamente em t_float, porque sua segunda coluna, c2, usa o tipo de dados decimal.However, BULK INSERT cannot import this data directly into t_float, because its second column, c2, uses the decimal data type. Portanto, um arquivo de formato é necessário.Therefore, a format file is necessary. O arquivo de formato deve mapear os dados float de notação científica para o formato decimal de coluna c2.The format file must map the scientific notation float data to the decimal format of column c2.

O arquivo de formato a seguir usa o tipo de dados SQLFLT8 para mapear o segundo campo de dados para a segunda coluna: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 usar esse arquivo de formato (usando o nome de arquivo C:\t_floatformat-c-xml.xml) ao importar os dados de teste para a tabela de teste, emita a seguinte instrução 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');

Importante

O Banco de Dados SQL do Azure não dá suporte à leitura de arquivos do Windows, mas pode ler o Armazenamento de Blobs do Azure.Azure SQL Database does not support reading from Windows files, but can read from Azure Blob storage.

Tipos de dados para exportação ou importação em massa de documentos SQLXMLData Types for Bulk Exporting or Importing SQLXML Documents

Para exportar ou importar dados SQLXML em massa, use um dos tipos de dados a seguir em seu arquivo de formato:To bulk export or import SQLXML data, use one of the following data types in your format file:

Tipo de dadosData type EfeitoEffect
SQLCHAR ou SQLVARCHARSQLCHAR or SQLVARCHAR Os dados são enviados na página de código do cliente ou na página de código implicada pela ordenação.The data is sent in the client code page or in the code page implied by the collation). O efeito é o mesmo que especificar DATAFILETYPE ='char' sem especificar um arquivo de formato.The effect is the same as specifying the DATAFILETYPE ='char' without specifying a format file.
SQLNCHAR ou SQLNVARCHARSQLNCHAR or SQLNVARCHAR Os dados são enviados como Unicode.The data is sent as Unicode. O efeito é o mesmo que especificar DATAFILETYPE = 'widechar' sem especificar um arquivo de formato.The effect is the same as specifying the DATAFILETYPE = 'widechar' without specifying a format file.
SQLBINARY ou SQLVARBINSQLBINARY or SQLVARBIN Os dados são enviados sem qualquer conversão.The data is sent without any conversion.
   

Comentários geraisGeneral Remarks

Para obter uma comparação da instrução BULK INSERT, da instrução INSERT ... Instrução SELECT * FROM OPENROWSET(BULK...) e o comando bcp, veja Importação e exportação em massa de dados (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 obter informações sobre como preparar dados para importação em massa, veja Preparar dados para exportação ou importação em massa (SQL Server).For information about preparing data for bulk import, see Prepare Data for Bulk Export or Import (SQL Server).

A instrução BULK INSERT pode ser executada dentro de uma transação definida pelo usuário para importar dados em uma tabela ou exibição.The BULK INSERT statement can be executed within a user-defined transaction to import data into a table or view. Opcionalmente, para usar várias correspondências para obter dados de importação em massa, uma transação pode especificar a cláusula BATCHSIZE na instrução de BULK INSERT.Optionally, to use multiple matches for bulk importing data, a transaction can specify the BATCHSIZE clause in the BULK INSERT statement. Se uma transação de vários lotes for revertida, todo o lote enviado pela transação ao SQL ServerSQL Server será revertido.If a multiple-batch transaction is rolled back, every batch that the transaction has sent to SQL ServerSQL Server is rolled back.

InteroperabilidadeInteroperability

Importando dados de um arquivo CSVImporting Data from a CSV file

No SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1 em diante, BULK INSERT dá suporte ao formato CSV, assim como o Banco de Dados SQL do Azure.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, BULK INSERT supports the CSV format, as does Azure SQL Database. Antes do SQL Server 2017 (14.x)SQL Server 2017 (14.x) CTP 1.1, arquivos CSV (valores separados por vírgula) não eram compatíveis com operações de importação em massa do SQL ServerSQL Server.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. No entanto, em alguns casos, um arquivo CSV pode ser usado como o arquivo de dados para uma importação em massa de dados no 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 obter informações sobre os requisitos para importar dados de um arquivo de dados CSV, veja Preparar dados para exportação ou importação em massa (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).

Comportamento de logLogging Behavior

Para obter informações sobre quando as operações de inserção de linhas executadas por importações em massa para o SQL Server são registradas no log de transações, confira Pré-requisitos para log mínimo na importação em massa.For information about when row-insert operations that are performed by bulk import into SQL SErver are logged in the transaction log, see Prerequisites for Minimal Logging in Bulk Import. Não há suporte para o log mínimo no Banco de Dados SQL do Azure.Minimal logging is not supported in Azure SQL Database.

RestriçõesRestrictions

Ao usar um arquivo de formato com BULK INSERT, você pode especificar até somente 1024 campos.When using a format file with BULK INSERT, you can specify up to 1024 fields only. Isso é o mesmo que o número máximo de colunas permitido em uma tabela.This is same as the maximum number of columns allowed in a table. Se você usar um arquivo de formato com BULK INSERT com um arquivo de dados que contém mais de 1.024 campos, BULK INSERT gerará o erro 4822.If you use a format file with BULK INSERT with a data file that contains more than 1024 fields, BULK INSERT generates the 4822 error. O utilitário BCP não tem esta limitação, portanto, para arquivos de dados que contêm mais de 1.024 campos, use BULK INSERT sem um arquivo de formato ou o comando bcp.The bcp utility does not have this limitation, so for data files that contain more than 1024 fields, use BULK INSERT without a format file or use the bcp command.

Considerações sobre desempenhoPerformance Considerations

Se o número de páginas a ser liberado em um único lote exceder um limite interno, poderá ocorrer um exame completo do pool de buffers para identificar quais páginas devem ser liberadas quando o lote for confirmado.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. Esse exame completo pode prejudicar o desempenho da importação em massa.This full scan can hurt bulk-import performance. Um caso provável de exceder o limite interno ocorre quando um pool de buffers grande é combinado com um 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 estouros de buffer em máquinas grandes, não use a dica TABLOCK (que removerá as otimizações em massa) ou use um tamanho de lote menor (que preserva as otimizações em massa).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).

Como os computadores variam, é recomendável testar vários tamanhos de lote com seu carregamento de dados para descobrir o que funciona melhor para você.Because computers vary, we recommend that you test various batch sizes with your data load to find out what works best for you.

Com o Banco de Dados SQL do Azure, considere o aumento temporário do nível de desempenho do banco de dados ou da instância antes da importação, caso esteja importando um grande volume de dados.With Azure SQL Database, consider temporarily increasing the performance level of the database or instance prior to the import if you are importing a large volume of data.

SegurançaSecurity

Delegação de conta de segurança (representação)Security Account Delegation (Impersonation)

Se um usuário usar um logon do SQL ServerSQL Server , o perfil de segurança da conta de processo do SQL ServerSQL Server será usado.If a user uses a SQL ServerSQL Server login, the security profile of the SQL ServerSQL Server process account is used. Um logon que usa a autenticação do SQL Server não pode ser autenticado fora do Mecanismo de Banco de Dados.A login using SQL Server authentication cannot be authenticated outside of the Database Engine. Assim, quando um comando BULK INSERT é iniciado por um logon que usa a autenticação do SQL Server, a conexão aos dados é feita por meio do contexto de segurança da conta de processo do SQL Server (a conta usada pelo serviço de Mecanismo de Banco de Dados do 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 ler a fonte de dados com êxito, você deve dar à conta usada pelo Mecanismo de Banco de Dados do SQL Server acesso ao banco de dados. Em contrapartida, se um usuário do SQL ServerSQL Server fizer logon por meio da Autenticação do Windows, ele poderá acessar, no modo somente leitura, aqueles arquivos que podem ser acessados pela conta do usuário, a despeito do perfil de segurança do processo do 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.

Durante a execução da instrução BULK INSERT usando sqlcmd ou osql, de um computador, durante a inserção de dados no SQL ServerSQL Server em um segundo computador e durante a especificação de um data_file em um terceiro computador por meio de um caminho UNC, você poderá receber um erro 4861.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 esse erro, use a Autenticação do SQL ServerSQL Server e especifique um logon do SQL ServerSQL Server que use o perfil de segurança da conta de processo do SQL ServerSQL Server, ou configure o Windows para habilitar a delegação de conta de segurança.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 obter informações sobre como habilitar uma conta de usuário que seja confiável para a delegação, consulte a Ajuda do Windows.For information about how to enable a user account to be trusted for delegation, see Windows Help.

Para obter mais informações sobre estas e outras considerações de segurança para usar BULK INSERT, veja Importação de dados em massa usando BULK INSERT ou 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).

Ao fazer uma importação do Armazenamento de Blobs do Azure e quando os dados não forem públicos (acesso anônimo), crie uma DATABASE SCOPED CREDENTIAL com base em uma chave SAS criptografada com uma MASTER KEY e, em seguida, crie uma fonte externa de banco de dados para uso no comando BULK INSERT.When importing from Azure Blob storage and the data is not public (anonymous access), create a DATABASE SCOPED CREDENTIAL based on a SAS key which is encrypted with a MASTER KEY, and then create an then create an external database source for use in your BULK INSERT command. Para obter um exemplo, confira Como importar dados de um arquivo no Armazenamento de Blobs do Azure.For an example, see Importing data from a file in Azure blob storage.

PermissõesPermissions

Requer as permissões INSERT e ADMINISTER BULK OPERATIONS.Requires INSERT and ADMINISTER BULK OPERATIONS permissions. No Banco de Dados SQL do Azure, são necessárias permissões de INSERT e ADMINISTER DATABASE BULK OPERATIONS.In Azure SQL Database, INSERT and ADMINISTER DATABASE BULK OPERATIONS permissions are required. Além disso, a permissão ALTER TABLE será necessária se uma ou mais das seguintes afirmações for verdadeira:Additionally, ALTER TABLE permission is required if one or more of the following is true:

  • Existem restrições e a opção CHECK_CONSTRAINTS não foi especificada.Constraints exist and the CHECK_CONSTRAINTS option is not specified.

    Observação

    Desabilitar restrições é o comportamento padrão.Disabling constraints is the default behavior. Para verificar as restrições explicitamente, use a opção CHECK_CONSTRAINTS.To check constraints explicitly, use the CHECK_CONSTRAINTS option.

  • Existem gatilhos e a opção FIRE_TRIGGER não foi especificada.Triggers exist and the FIRE_TRIGGER option is not specified.

    Observação

    Por padrão, os gatilhos não são disparados.By default, triggers are not fired. Para disparar gatilhos explicitamente, use a opção FIRE_TRIGGER.To fire triggers explicitly, use the FIRE_TRIGGER option.

  • Use a opção KEEPIDENTITY para importar valor de identidade do arquivo de dados.You use the KEEPIDENTITY option to import identity value from data file.

ExemplosExamples

A.A. Usando pipes para importar dados de um arquivoUsing pipes to import data from a file

O exemplo a seguir importa informações sobre detalhes de pedidos para a tabela AdventureWorks2012.Sales.SalesOrderDetail do arquivo de dados especificado usando um pipe (|) como terminador de campo e |\n como terminador de linha.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

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

B.B. Usando o argumento FIRE_TRIGGERSUsing the FIRE_TRIGGERS argument

O exemplo a seguir especifica o 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

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

C.C. Usando alimentação de linha como um terminador de linhaUsing line feed as a row terminator

O exemplo a seguir importa um arquivo que usa a alimentação de linha como um terminador de linha, como uma saída 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);

Observação

Devido ao modo como o Microsoft Windows trata arquivos de texto, (\n automaticamente é substituído por \r\n) .Due to how Microsoft Windows treats text files (\n automatically gets replaced with \r\n).

Importante

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

D.D. Especificando uma página de códigoSpecifying a code page

O exemplo a seguir mostra como especificar uma 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

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

E.E. Importando dados de um arquivo CSVImporting data from a CSV file

O exemplo a seguir mostra como especificar um arquivo CSV, ignorando o cabeçalho (primeira linha), usando ; como o terminador de campo e 0x0a como terminador de linha: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

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

F.F. Importando dados de um arquivo no Armazenamento de Blobs do AzureImporting data from a file in Azure blob storage

O exemplo a seguir mostra como carregar dados de um arquivo CSV em um local do Armazenamento de Blobs do Azure no qual você criou uma chave SAS.The following example shows how to load data from a csv file in an Azure Blob storage location on which you have created a SAS key. A localização do Armazenamento de Blobs do Azure é configurada como uma fonte de dados externa.The Azure Blob storage location is configured as an external data source. Isso exige uma credencial no escopo do banco de dados usando uma assinatura de acesso compartilhado que é criptografada com uma chave mestra no banco de dados de usuário.This requires a database scoped credential using a shared access signature that is encrypted using a master key in the user database.

--> Optional - a MASTER KEY is not requred if a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPassword1';
GO
--> Optional - a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
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 is configured for public (anonymous) access!
);

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

Importante

O Banco de Dados SQL do Azure não oferece suporte à leitura de arquivos do Windows.Azure SQL Database does not support reading from Windows files.

G.G. Importando dados de um arquivo no armazenamento de blobs do Azure e especificando um arquivo de erroImporting data from a file in Azure blob storage and specifying an error file

O exemplo a seguir mostra como carregar dados de um arquivo CSV em um local de Armazenamento de Blobs do Azure, que foi configurado como uma fonte de dados externa e também especificar um arquivo de erro.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. Isso requer uma credencial no escopo do banco de dados usando uma Assinatura de Acesso Compartilhado.This requires a database scoped credential using a shared access signature. Observe que, se for executada no Banco de Dados SQL, a opção ERRORFILE deverá vir acompanhada de ERRORFILE_DATA_SOURCE; caso contrário, a importação poderá falhar com um erro de permissões.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. O arquivo especificado em ERRORFILE não deve existir no contêiner.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 obter exemplos de BULK INSERT completos, incluindo a configuração da credencial e da fonte de dados externa, consulte Exemplos de acesso em massa a dados no Armazenamento de Blobs do Azure.For complete BULK INSERT examples including configuring the credential and external data source, see Examples of Bulk Access to Data in Azure Blob Storage.

Exemplos adicionaisAdditional Examples

Outros exemplos BULK INSERT são fornecidos nos tópicos a seguir:Other BULK INSERT examples are provided in the following topics:

Consulte TambémSee Also