Sobre operações de importação e exportação em massa

O SQL Server dá suporte à exportação de dados em massa de uma tabela do SQL Server e à importação de dados em massa em uma tabela ou exibição não particionada do SQL Server. Os métodos básicos a seguir estão disponíveis.

Método

Descrição

Importa dados

Exporta dados

Utilitário bcp

Um utilitário de linha de comando (Bcp.exe) que exporta e importa dados em massa e gera arquivos de formato.

Sim

Sim

Instrução BULK INSERT

Uma instrução Transact-SQL que importa dados diretamente de um arquivo de dados para uma tabela de banco de dados ou exibição não particionada.

Sim

Não

Instrução INSERT ... SELECT * FROM OPENROWSET(BULK...) instrução

Uma instrução Transact-SQL que usa o provedor de conjunto de linhas em massa OPENROWSET para importação de dados em massa em uma tabela do SQL Server especificando a função OPENROWSET(BULK...) para selecionar dados em uma instrução INSERT.

Sim

Não

Restrições

As operações de importação em massa do SQL Server não dão suporte a dados de importação de arquivos CSV ( valores separados por vírgula). No entanto, em sistemas de 32 bits, é possível importar dados de CSV em uma tabela do SQL Server sem otimizações de importação em massa usando OPENROWSET com o Provedor do OLE DB para Jet. O Jet trata arquivos de texto como tabelas, com o esquema definido por um arquivo schema.ini localizado no mesmo diretório da fonte de dados. Para dados CSV, um dos parâmetros no arquivo schema.ini é "FORMAT=CSVDelimited". Para usar essa solução, você precisa compreender as operações do Jet Test IISAMm (sua sintaxe de cadeia de conexão, o uso de schema.ini, as opções de configuração de Registro, e assim por diante). As melhores fontes dessas informações são a Ajuda do Microsoft Access e os artigos da KB (Base de Dados de Conhecimento). Para obter mais informações, consulte Initializing the Text Data Source Driver, How To Use a SQL Server 7.0 Distributed Query with a Linked Server to Secured Access Databases e HOW TO: Use Jet OLE DB Provider 4.0 to Connect to ISAM Databases, How To Open Delimited Text Files Using the Jet Provider's Text.

Operação dentro do processo versus fora do processo

A instrução BULK INSERT e a função OPENROWSET (BULK) são executadas dentro do processo com o SQL Server compartilhando o mesmo espaço de endereço de memória. Como os arquivos de dados são abertos por um processo do SQL Server, não são copiados dados entre o processo cliente e os processos do SQL Server. Para obter considerações de segurança ao importar dados usando BULK INSERT ou INSERT ... SELECT * FROM OPENROWSET(BULK...), consulte Importando dados em massa usando BULK INSERT ou OPENROWSET(BULK...).

Por outro lado, o utilitário bcp é executado fora do processo. Para mover dados entre espaços de memória do processo, o bcp deve usar o marshaling de dados entre processos. Marshaling de dados entre processosé o processo de conversão de parâmetros de um método chamado em um fluxo de bytes. Isso pode adicionar carga significativa ao processador. Contudo, como o bcp analisa os dados e os converte em formato de armazenamento nativo no processo do cliente, eles podem descarregar a análise e a conversão de dados do processo do SQL Server. Portanto, se você tiver uma restrição de CPU, conseguirá melhorar o desempenho da importação em massa em um computador com mais de uma CPU, ou em computadores diferentes, usando o utilitário bcp, em vez de usar a instrução BULK INSERT ou INSERT ... SELECT * FROM OPENROWSET(BULK).

Arquivos de formato

O utilitário bcp, a instrução BULK INSERT e a instrução INSERT... SELECT * FROM OPENROWSET(BULK...) oferecem suporte ao uso de um arquivo de formato especializado que armazena informações de formato de cada campo em um arquivo de dados. Um arquivo de formato também pode conter informações sobre a tabela do SQL Server correspondente. O arquivo de formato pode ser usado para fornecer todas as informações de formato necessárias para exportar e importar dados em massa para uma instância do SQL Server.

Os arquivos de formato fornecem um modo flexível para interpretar dados como eles são no arquivo de dados durante a importação, e também formatar dados no arquivo de dados durante a exportação. Essa flexibilidade elimina a necessidade de gravar um código com finalidade especial para interpretar os dados ou reformatar os dados segundo requisitos específicos do SQL Server ou o aplicativo externo. Por exemplo, se você estiver exportando dados em massa para serem carregados em um aplicativo que exige valores separados por vírgula, use um arquivo de formato para inserir vírgulas como terminadores de campo nos dados exportados.

O SQL Server 2005 e versões posteriores oferecem suporte a dois tipos de arquivos de formato: arquivos de formato XML e não XML. Há suporte aos arquivos de formato não XML em versões mais recentes do SQL Server; os arquivos de formato XML eram novos no SQL Server 2005.

O utilitário bcp é a única ferramenta que pode gerar um arquivo de formato. Para obter mais informações, consulte Criando um arquivo de formato. Para obter mais informações sobre arquivos de formato, consulte Arquivos de formato para importação ou exportação de dados.

ObservaçãoObservação

Se um arquivo de formato não for fornecido durante uma operação de exportação ou importação em massa, o usuário poderá escolher substituir a formatação padrão na linha de comando.

O processador de consultas e a importação em massa

Para importar dados em massa em uma instância do SQL Server, o utilitário bcp , a instrução BULK INSERT e a instrução INSERT... SELECT * FROM OPENROWSET(BULK...) funcionam com o processador de consultas.

Todos os três métodos convertem os dados em um arquivo de dados em conjuntos de linhas OLE DB. Mas o método de conversão varia, como se segue:

  • O utilitário bcp lê o arquivo de dados e envia um fluxo TDS à API do BCP (Programa de cópia em massa) do SQL Server, que converte os dados em conjuntos de linhas OLE DB.

  • Os provedores de conjunto de linhas BULK INSERT e OPENROWSET convertem dados de arquivo diretamente em um conjunto de linhas OLE DB.

Os conjuntos de linhas OLE DB são inseridos na tabela de destino pelo processador de consulta, que planeja e aperfeiçoa cada operação.

Considerações sobre desempenho

As considerações sobre desempenho também podem ser significantes quando estão sendo importadas grandes quantidades de dados. Em alguns casos, o desempenho pode ser melhorado ao alterar como uma operação de importação ou de exportação em massa controlam um ou mais do seguinte:

  • Opções de lote

  • Verificação de restrições CHECK

  • Como as transações em massa são registradas. Isso é relevante para bancos de dados que normalmente usam o modelo de recuperação completa.

  • Ordenação de dados exportados

  • Importação de dados paralelos

  • Bloqueio de tabela

  • Execução do gatilho

Para obter mais informações, consulte Otimizando o desempenho de importação em massa.

ObservaçãoObservação

Não existe nenhuma técnica de otimização especial para operações de exportação em massa. Essas operações simplesmente selecionam os dados da tabela de origem usando uma instrução SELECT.