Compartilhar via


Executando operações de cópia em massa

O recurso de cópia em massa do SQL Server dá suporte à transferência de grandes quantidades de dados para ou para fora de uma tabela ou exibição do SQL Server. Os dados também podem ser transferidos especificando uma instrução SELECT. Os dados podem ser movidos entre o SQL Server e um arquivo de dados do sistema operacional, como um arquivo ASCII. O arquivo de dados pode ter formatos diferentes; o formato é definido como cópia em massa em um arquivo de formato. Opcionalmente, os dados podem ser carregados em variáveis de programa e transferidos para o SQL Server usando funções e métodos de cópia em massa.

Para obter um aplicativo de exemplo que demonstra esse recurso, consulte Copiar dados em massa usando IRowsetFastLoad (OLE DB).

Um aplicativo normalmente usa cópia em massa de uma das seguintes maneiras:

  • Copiar em massa de uma tabela, exibição ou o conjunto de resultados de uma instrução Transact-SQL em um arquivo de dados em que os dados são armazenados no mesmo formato que a tabela ou exibição.

    Isso é chamado de arquivo de dados de modo nativo.

  • Copiar em massa de uma tabela, exibição ou o conjunto de resultados de uma instrução Transact-SQL em um arquivo de dados em que os dados são armazenados em um formato diferente do da tabela ou exibição.

    Nesse caso, um arquivo de formato separado é criado que define as características (tipo de dados, posição, comprimento, terminador e assim por diante) de cada coluna como ela é armazenada no arquivo de dados. Se todas as colunas forem convertidas em formato de caractere, o arquivo resultante será chamado de arquivo de dados de modo de caractere.

  • Copiar em massa de um arquivo de dados para uma tabela ou exibição.

    Se necessário, um arquivo de formato é usado para determinar o layout do arquivo de dados.

  • Carregue dados em variáveis de programa e importe os dados para uma tabela ou exibição usando as funções de cópia em massa para cópia em massa em uma linha de cada vez.

Os arquivos de dados usados pelas funções de cópia em massa não precisam ser criados por outro programa de cópia em massa. Qualquer outro sistema pode gerar um arquivo de dados e formatar arquivo de acordo com definições de cópia em massa; esses arquivos podem ser usados com um programa de cópia em massa do SQL Server para importar dados para o SQL Server. Por exemplo, você pode exportar dados de uma planilha em um arquivo delimitado por tabulação, criar um arquivo de formato descrevendo o arquivo delimitado por tabulação e, em seguida, usar um programa de cópia em massa para importar rapidamente os dados para o SQL Server. Os arquivos de dados gerados pela cópia em massa também podem ser importados para outros aplicativos. Por exemplo, você pode usar funções de cópia em massa para exportar dados de uma tabela ou exibição para um arquivo delimitado por tabulação que poderia ser carregado em uma planilha.

Os programadores que codificam aplicativos para usar as funções de cópia em massa devem seguir as regras gerais para um bom desempenho de cópia em massa. Para obter mais informações sobre o suporte para operações de cópia em massa no SQL Server, consulte Importação e Exportação de Dados em Massa (SQL Server).

Limitações e restrições

Um UDT (tipo definido pelo usuário) CLR deve ser associado como dados binários. Mesmo que um arquivo de formato especifique SQLCHAR como o tipo de dados para uma coluna UDT de destino, o utilitário BCP tratará os dados como binários.

Não use SET FMTONLY OFF com operações de cópia em massa. SET FMTONLY OFF pode fazer com que sua operação de cópia em massa falhe ou forneça resultados inesperados.

Provedor OLE DB do SQL Server Native Client

O provedor OLE DB do SQL Server Native Client implementa dois métodos para executar operações de cópia em massa com um banco de dados do SQL Server. O primeiro método envolve o uso da interface IRowsetFastLoad para operações de cópia em massa baseadas em memória; e o segundo envolve o uso da interface IBCPSession para operações de cópia em massa baseadas em arquivo.

Usando operações de cópia em massa baseadas em memória

O provedor OLE DB do SQL Server Native Client implementa a interface IRowsetFastLoad para expor o suporte para operações de cópia em massa baseadas em memória do SQL Server. A interface IRowsetFastLoad implementa os métodos IRowsetFastLoad::Commit e IRowsetFastLoad::InsertRow .

Habilitando uma sessão para IRowsetFastLoad

O consumidor notifica o provedor OLE DB do SQL Server Native Client de sua necessidade de cópia em massa definindo a propriedade de fonte de dados específica do provedor OLE DB do SQL Server Native Client SSPROP_ENABLEFASTLOAD como VARIANT_TRUE. Com a propriedade definida na fonte de dados, o consumidor cria uma sessão de provedor OLE DB do SQL Server Native Client. A nova sessão permite o acesso do consumidor à interface IRowsetFastLoad .

Observação

Se a interface IDataInitialize for usada para inicializar a fonte de dados, será necessário definir a propriedade SSPROP_IRowsetFastLoad no parâmetro rgPropertySets do método IOpenRowset::OpenRowset ; caso contrário, a chamada para o método OpenRowset retornará E_NOINTERFACE.

Habilitar uma sessão para cópia em massa restringe o suporte do provedor OLE DB do SQL Server Native Client para interfaces na sessão. Uma sessão habilitada para cópia em massa expõe apenas as seguintes interfaces:

  • IDBSchemaRowset

  • IGetDataSource

  • IOpenRowset

  • ISupportErrorInfo

  • ITransactionJoin

Para desabilitar a criação de conjuntos de linhas habilitados para cópia em massa e fazer com que a sessão do provedor OLE DB do SQL Server Native Client seja revertida para o processamento padrão, redefina SSPROP_ENABLEFASTLOAD para VARIANT_FALSE.

Conjuntos de linhas IRowsetFastLoad

Os conjuntos de linhas de cópia em massa do provedor OLE DB do SQL Server Native Client são somente gravação, mas expõem interfaces que permitem ao consumidor determinar a estrutura de uma tabela do SQL Server. As interfaces a seguir são expostas em um conjunto de linhas do provedor OLE DB do SQL Server Native Client habilitado para cópia em massa:

  • IAccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

As propriedades específicas do provedor SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS e comportamentos de controle SSPROP_FASTLOADKEEPIDENTITY de um conjunto de linhas de cópia em massa do provedor OLE DB do SQL Server Native Client. As propriedades são especificadas no membro rgProperties de um membro do parâmetro rgPropertySetsIOpenRowset.

ID da Propriedade Descrição
SSPROP_FASTLOADKEEPIDENTITY Coluna: Não

R/W: leitura/gravação

Tipo: VT_BOOL

Padrão: VARIANT_FALSE

Descrição: mantém os valores de identidade fornecidos pelo consumidor.

VARIANT_FALSE: os valores de uma coluna de identidade na tabela do SQL Server são gerados pelo SQL Server. Qualquer valor associado à coluna é ignorado pelo provedor OLE DB do SQL Server Native Client.

VARIANT_TRUE: o consumidor associa um acessador que fornece um valor para uma coluna de identidade do SQL Server. A propriedade de identidade não está disponível em colunas que aceitam NULL, portanto, o consumidor fornece um valor exclusivo em cada chamada IRowsetFastLoad::Insert .
SSPROP_FASTLOADKEEPNULLS Coluna: Não

R/W: leitura/gravação

Tipo: VT_BOOL

Padrão: VARIANT_FALSE

Descrição: mantém NULL para colunas com uma restrição DEFAULT. Afeta apenas as colunas do SQL Server que aceitam NULL e têm uma restrição DEFAULT aplicada.

VARIANT_FALSE: o SQL Server insere o valor padrão da coluna quando o consumidor do provedor OLE DB do SQL Server Native Client insere uma linha contendo NULL para a coluna.

VARIANT_TRUE: o SQL Server insere NULL para o valor da coluna quando o consumidor do provedor OLE DB do SQL Server Native Client insere uma linha contendo NULL para a coluna.
SSPROP_FASTLOADOPTIONS Coluna: Não

R/W: leitura/gravação

Tipo: VT_BSTR

Padrão: nenhum

Descrição: essa propriedade é a mesma que o -h "hint[,... n]" opção do utilitário bcp . As cadeias de caracteres a seguir podem ser usadas como opções na cópia em massa de dados em uma tabela.

ORDER(column[ASC | DESC][,... n]): classificar a ordem dos dados no arquivo de dados. O desempenho da cópia em massa será melhorado se o arquivo de dados que está sendo carregado for classificado de acordo com o índice clusterizado na tabela.

= ROWS_PER_BATCHbb: Número de linhas de dados por lote (como bb). O servidor otimiza o carregamento em massa de acordo com o valor bb. Por padrão, ROWS_PER_BATCH é desconhecido.

= KILOBYTES_PER_BATCHcc: Número de quilobytes (KB) de dados por lote (como cc). Por padrão, KILOBYTES_PER_BATCH é desconhecido.

TABLOCK: um bloqueio no nível da tabela é adquirido durante a operação de cópia em massa. Essa opção melhora significativamente o desempenho porque manter um bloqueio somente durante a operação de cópia em massa reduz a contenção de bloqueio na tabela. Uma tabela pode ser carregada por vários clientes simultaneamente se a tabela não tiver índices e TABLOCK for especificado. Por padrão, o comportamento de bloqueio é determinado pelo bloqueio da tabela de opção de tabela na carga em massa.

CHECK_CONSTRAINTS: todas as restrições em table_name são verificadas durante a operação de cópia em massa. Por padrão, as restrições são ignoradas.

FIRE_TRIGGER: o SQL Server usa o controle de versão de linha para gatilhos e armazena as versões de linha no repositório de versões no tempdb. Portanto, as otimizações de log em massa estão disponíveis mesmo quando os gatilhos estão habilitados. Antes de importar em massa um lote com um grande número de linhas com gatilhos habilitados, talvez seja necessário expandir o tamanho do tempdb.

Usando operações de cópia em massa baseadas em arquivo

O provedor OLE DB do SQL Server Native Client implementa a interface IBCPSession para expor o suporte para operações de cópia em massa baseadas em arquivo do SQL Server. A interface IBCPSession implementa a IBCPSession::BCPColFmt, Métodos IBCPSession::BCPColumns, IBCPSession::BCPControl, IBCPSession::BCPDone, IBCPSession::BCPExec, IBCPSession::BCPInit, IBCPSession::BCPReadFmt e IBCPSession::BCPWriteFmt.

Driver ODBC do SQL Server Native Client

O driver ODBC do SQL Server Native Client mantém o mesmo suporte para operações de cópia em massa que faziam parte das versões anteriores do driver ODBC do SQL Server. Para obter informações sobre operações de cópia em massa usando o driver ODBC do SQL Server Native Client, consulte Executar operações de cópia em massa (ODBC).

Consulte Também

Recursos do SQL Server Native Client
Propriedades da fonte de dados (OLE DB)
Importação e exportação em massa de dados (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)
Otimizando o desempenho de importação em massa