Partilhar via


Executando operações de cópia em massa no SQL Server Native Client

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure do Azure Synapse AnalyticsAnalytics Platform System (PDW)

Importante

SQL Server Native Client (SNAC) não é fornecido com:

  • SQL Server 2022 (16.x) e versões posteriores
  • SQL Server Management Studio 19 e versões posteriores

O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Microsoft OLE DB Provider for SQL Server (SQLOLEDB) herdado não são recomendados para o desenvolvimento de novos aplicativos.

Para novos projetos, use um dos seguintes drivers:

Para o SQLNCLI fornecido como componente do Mecanismo de Base de Dados do SQL Server (versões de 2012 a 2019), consulte esta exceção ao Ciclo de Vida de Suporte .

O recurso de cópia em massa do SQL Server dá suporte à transferência de grandes quantidades de dados para dentro 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 diferentes formatos; O formato é definido para 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 Bulk Copy Data Using IRowsetFastLoad (OLE DB).

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

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

    Isso é chamado de arquivo de dados de modo nativo.

  • Cópia em massa de uma tabela, exibição ou conjunto de resultados de uma instrução Transact-SQL para um arquivo de dados onde 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.

  • Cópia 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, em seguida, 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 por 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 o arquivo de acordo com as 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ções, criar um arquivo de formato descrevendo o arquivo delimitado por tabulações 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 por 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ções que pode 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 em massa de dados (SQL Server).

Limitações e Restrições

Um tipo definido pelo usuário (UDT) CLR deve ser vinculado 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 dê 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 arquivos.

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 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 .

Habilitando uma sessão para IRowsetFastLoad

O consumidor notifica o provedor OLE DB do SQL Server Native Client sobre 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 do 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

  • ITransactionJunte-se

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 reverta 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 SSPROP_FASTLOADKEEPIDENTITY comportamentos de controle 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 do imóvel Descrição
SSPROP_FASTLOADKEEPIDENTITY Coluna: Não

R/W: Leitura/escrita

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 vincula um acessador fornecendo um valor para uma coluna de identidade do SQL Server. A propriedade identity 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/escrita

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 padrão para a 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/escrita

Tipo: VT_BSTR

Padrão: nenhum

Descrição: Esta propriedade é a mesma que - h "hint[,... n]" opção do utilitário bcp . A(s) seguinte(s) cadeia(s) pode(m) ser usada(s) como opção(ões) na cópia em massa de dados para uma tabela.

ORDEM(coluna[ASC | DESC][,... n]): Ordem de classificação 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 a carga em massa de acordo com o valor bb. Por padrão, ROWS_PER_BATCH é desconhecido.

= KILOBYTES_PER_BATCHcc: Número de kilobytes (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 apenas 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 de tabela de opções de tabela em carregamento em massa.

CHECK_CONSTRAINTS: Quaisquer restrições de 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 em tempdb. Portanto, 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 a operações de cópia em massa baseadas em arquivos do 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 .

SQL Server Native Client ODBC Driver

O driver ODBC do SQL Server Native Client mantém o mesmo suporte para operações de cópia em massa que faziam parte de 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 Executando operações de cópia em massa (ODBC).

Ver 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 da importação em massa