Partilhar via


Executando operações de cópia em massa

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Base de dados SQL no Microsoft Fabric

Baixar driver OLE DB

A funcionalidade de cópia em massa do SQL Server suporta a transferência de grandes quantidades de dados para ou para fora de uma tabela ou vista 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 ficheiro de dados do sistema operativo, como um ficheiro ASCII. O ficheiro de dados pode ter diferentes formatos; O formato é definido para copiar em massa num ficheiro 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 uma aplicação de exemplo que demonstra esta funcionalidade, veja Bulk Copy Data Using IRowsetFastLoad (OLE DB).

Uma aplicação normalmente utiliza cópia em massa de uma das seguintes formas:

  • Copie em massa de uma tabela, vista ou conjunto de resultados de uma instrução Transact-SQL para um ficheiro de dados onde os dados são armazenados no mesmo formato da tabela ou vista.

    Isto chama-se ficheiro de dados em modo nativo.

  • Cópia em massa de uma tabela, vista ou do conjunto de resultados de uma instrução Transact-SQL para um ficheiro de dados onde os dados são armazenados num formato diferente do da tabela ou vista.

    Neste caso, é criado um ficheiro de formato separado que define as características (tipo de dados, posição, comprimento, terminador, etc.) de cada coluna à medida que é armazenada no ficheiro de dados. Se todas as colunas forem convertidas para formato de caracteres, o ficheiro resultante é chamado de ficheiro de dados em modo de caracteres.

  • Cópia em massa de um ficheiro de dados para uma tabela ou vista.

    Se necessário, é utilizado um ficheiro de formatação para determinar a disposição do ficheiro de dados.

  • Carregue dados em variáveis de programa e depois importe os dados para uma tabela ou vista usando as funções de cópia em massa para cópia em massa seguida.

Os ficheiros de dados usados pelas funções de cópia em massa não precisam de ser criados por outro programa de cópia em massa. Qualquer outro sistema pode gerar um ficheiro de dados e um ficheiro de formato de acordo com definições de cópia em massa; estes ficheiros podem então ser usados com um programa de cópia em massa do SQL Server para importar dados para o SQL Server. Por exemplo, poderia exportar dados de uma folha de cálculo num ficheiro delimitado por tabulação, construir um ficheiro de formato a descrever o ficheiro delimitado por tabulação e depois usar um programa de cópia em massa para importar rapidamente os dados para o SQL Server. Os ficheiros de dados gerados por cópia em massa também podem ser importados para outras aplicações. Por exemplo, poderia usar funções de cópia em massa para exportar dados de uma tabela ou vista para um ficheiro delimitado por tabulação que depois poderia ser carregado numa folha de cálculo.

Os programadores que programam aplicações 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 mais informações sobre o suporte a operações de cópia em massa no SQL Server, consulte Importação e Exportação em Massa de Dados (SQL Server).

Limitações e Restrições

Um tipo CLR definido pelo utilizador (UDT) deve ser limitado como dados binários. Mesmo que um ficheiro de formato especifique SQLCHAR como tipo de dado para uma coluna UDT alvo, a utilitária BCP tratará os dados como binários.

Não use SET FMTONLY OFF com operações de cópia em massa. DESLIGAR O FMTONLY pode causar a falha da sua operação de cópia em massa ou dar resultados inesperados.

Driver OLE DB para SQL Server

O Driver OLE DB para SQL Server implementa dois métodos para realizar operações de cópia em massa com uma base de dados SQL Server. O primeiro método envolve a utilização da interface IRowsetFastLoad para operações de cópia em massa baseadas em memória; e a segunda envolve a utilização da interface IBCPSession para operações de cópia em massa baseadas em ficheiros.

Utilização de operações de cópia em massa baseadas em memória

O Driver OLE DB para SQL Server implementa a interface IRowsetFastLoad para expor suporte a 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 .

Ativar uma Sessão para IRowsetFastLoad

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

Observação

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

Ativar uma sessão para cópia em massa limita o OLE DB Driver para suporte ao SQL Server para interfaces na sessão. Uma sessão com cópia em massa expõe apenas as seguintes interfaces:

  • IDBSchemaRowset

  • IGetDataSource

  • IOpenRowSet

  • ISupportErrorInfo

  • ITransactionJunte-te

Para desativar a criação de conjuntos de linhas com cópia em massa e fazer com que o Driver OLE DB para a sessão SQL Server regresse ao processamento padrão, reinicie SSPROP_ENABLEFASTLOAD para VARIANT_FALSE.

Conjuntos de Linhas IRowsetFastLoad

O Driver OLE DB para conjuntos de linhas de cópias em massa do SQL Server são apenas de escrita, mas expõem interfaces que permitem ao consumidor determinar a estrutura de uma tabela SQL Server. As seguintes interfaces são expostas num conjunto de linhas OLE DB Driver para SQL Server com cópia em massa:

  • IAccessor

  • IColumnsInfo

  • IColumnsRowset

  • IConvertType

  • IRowsetFastLoad

  • IRowsetInfo

  • ISupportErrorInfo

As propriedades específicas do fornecedor SSPROP_FASTLOADOPTIONS, SSPROP_FASTLOADKEEPNULLS e SSPROP_FASTLOADKEEPIDENTITY controlam os comportamentos de um Driver OLE DB para o conjunto de linhas de cópia em massa do SQL Server. As propriedades são especificadas no membro rgProperties de um parámetro rgPropertySetsIOpenRowset .

ID da Propriedade Description
SSPROP_FASTLOADKEEPIDENTITY Coluna: Não

R/W: Ler/Escrever

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 limitado para a coluna é ignorado pelo Driver OLE DB para SQL Server.

VARIANT_TRUE: O consumidor associa um acessório que fornece um valor para uma coluna de identidade do SQL Server. A propriedade identidade não está disponível em colunas que aceitam NULL, pelo que o consumidor fornece um valor único em cada chamada IRowsetFastLoad::Insert .
SSPROP_FASTLOADKEEPNULLS Coluna: Não

R/W: Ler/Escrever

Tipo: VT_BOOL

Padrão: VARIANT_FALSE

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

VARIANT_FALSE: O SQL Server insere o valor predefinido para a coluna quando o consumidor do Driver OLE DB para SQL Server insere uma linha contendo NULL para a coluna.

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

R/W: Ler/Escrever

Tipo: VT_BSTR

Predefinido: nenhum

Descrição: Esta propriedade é igual à "dica[,... -h n]" Opção da utilidade BCP. A(s) cadeia(s) seguinte(s) podem ser usadas como opção(s) na cópia em massa de dados para uma tabela.

ORDER(column[ASC | DESC][,... n]): Ordenar os dados no ficheiro de dados. O desempenho da cópia em massa é melhorado se o ficheiro de dados a ser carregado for ordenado de acordo com o índice agrupado na tabela.

ROWS_PER_BATCH = bb: Número de linhas de dados por lote (como bb). O servidor otimiza a carga global de acordo com o valor bb. Por defeito, ROWS_PER_BATCH é desconhecido.

KILOBYTES_PER_BATCH = cc: Número de kilobytes (KB) de dados por lote (como cc). Por defeito, KILOBYTES_PER_BATCH é desconhecido.

TABLOCK: Um bloqueio ao nível da tabela é adquirido durante a duração da operação de cópia em massa. Esta opção melhora significativamente o desempenho porque manter um bloqueio apenas durante a operação de cópia em massa reduz a contenção dos bloqueios na mesa. Uma tabela pode ser carregada por vários clientes em simultâneo se a tabela não tiver índices e o TABLOCK for especificado. Por defeito, o comportamento de bloqueio é determinado pelo bloqueio da tabela de opções na carga em massa.

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

FIRE_TRIGGER: O SQL Server utiliza versionamento de linhas para os gatilhos e armazena as versões das linhas no armazenamento de versões no tempdb. Por isso, as otimizações de logs em massa estão disponíveis mesmo quando os gatilhos estão ativados. Antes de importares em massa um lote com um grande número de linhas e triggers ativados, podes precisar de expandir o tamanho do tempdb.

Utilização de operações de cópia em massa baseadas em ficheiros

O Driver OLE DB para SQL Server implementa a interface IBCPSession para expor suporte a operações de cópia em massa baseadas em ficheiros SQL Server. A interface IBCPSession implementa os métodos IBCPSession::BCPColFmt, IBCPSession::BCPColumns, IBCPSession::BCPControl, IBCPSession::BCPDone, IBCPSession::BCPExec, IBCPSession::BCPInit, IBCPSession::BCPReadFmt e IBCPSession::BCPWriteFmt.

Ver também

Driver OLE DB para Funcionalidades do SQL Server
Propriedades da Fonte de Dados (OLE DB)
Importação e exportação em massa de dados (SQL Server)
IRowsetFastLoad (OLE DB)
IBCPSession (OLE DB)