Compartilhar via


Convertendo de cópia em massa DB-Library em ODBC

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics

A conversão de um programa de cópia em massa da biblioteca de banco de dados em ODBC é fácil porque as funções de cópia em massa compatíveis com o driver ODBC do SQL Server Native Client são semelhantes às funções de cópia em massa da biblioteca de banco de dados, com as seguintes exceções:

  • Os aplicativos DB-Library passam, para uma estrutura DBPROCESS, um ponteiro como o primeiro parâmetro de funções de cópia em massa. Em aplicativos ODBC, o ponteiro DBPROCESS é substituído por um identificador de conexão ODBC.

  • Os aplicativos da biblioteca de banco de dados chamam BCP_SETL antes de se conectar para habilitar operações de cópia em massa em um DBPROCESS. Em vez disso, os aplicativos ODBC chamam SQLSetConnectAttr antes de se conectar para habilitar operações em massa em um identificador de conexão:

    SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP,  
        (void *)SQL_BCP_ON, SQL_IS_INTEGER);  
    
  • O driver ODBC do SQL Server Native Client não dá suporte a manipuladores de mensagens e erros da biblioteca de banco de dados; você deve chamar SQLGetDiagRec para obter erros e mensagens geradas pelas funções de cópia em massa ODBC. As versões ODBC das funções de cópia em massa retornam os códigos de retorno padrão da cópia em massa, SUCCEED ou FAILED, e não os códigos de retorno ODBC, como SQL_SUCCESS ou SQL_ERROR.

  • Os valores especificados para o parâmetro DB-Library bcp_bindvarlen são interpretados de forma diferente do parâmetro ODBC bcp_bindcbData.

    Condição indicada Valor varlen da biblioteca de banco de dados Valor ODBC cbData
    Valores nulos fornecidos 0 -1 (SQL_NULL_DATA)
    Dados de variável fornecidos -1 -10 (SQL_VARLEN_DATA)
    Cadeia binária ou de caracteres de comprimento zero NA 0

    Na biblioteca de banco de dados, um valor varlen de -1 indica que os dados de comprimento variável estão sendo fornecidos, o que no ODBC cbData é interpretado como significando que apenas valores NULL estão sendo fornecidos. Altere todas as especificações varlen da biblioteca de banco de dados de -1 para SQL_VARLEN_DATA e quaisquer especificações varlen de 0 para SQL_NULL_DATA.

  • O file_collen bcp_colfmtda biblioteca de banco de dados e o ODBC bcp_colfmtcbUserData têm o mesmo problema que os parâmetros bcp_bindvarlen e cbData observados acima. Altere todas as especificações de file_collen da biblioteca de banco de dados de -1 para SQL_VARLEN_DATA e quaisquer especificações de file_collen de 0 para SQL_NULL_DATA.

  • O parâmetro iValue da função bcp_control ODBC é um ponteiro void. Na DB-Library, iValue era um número inteiro. Converta os valores do ODBC iValue para void *.

  • A opção bcp_control BCPMAXERRS especifica quantas linhas individuais podem ter erros antes que uma operação de cópia em massa falhe. O padrão para BCPMAXERRS é 0 (falha no primeiro erro) na versão DB-Library do bcp_control e 10 na versão ODBC. Os aplicativos da biblioteca de banco de dados que dependem do padrão de 0 para encerrar uma operação de cópia em massa devem ser alterados para chamar o bcp_control ODBC para definir BCPMAXERRS como 0.

  • A função ODBC bcp_control suporta as seguintes opções não suportadas pela versão DB-Library do bcp_control:

    • BCPODBC

      Quando definido como TRUE, especifica que os valores datetime e smalldatetime salvos no formato de caractere terão o prefixo e o sufixo da sequência de escape do carimbo de data/hora ODBC. Isso se aplica apenas a operações BCP_OUT.

      Com BCPODBC definido como FALSE, um valor de data e hora convertido em uma cadeia de caracteres é gerado como:

      1997-01-01 00:00:00.000  
      

      Com BCPODBC definido como TRUE, o mesmo valor de data e hora é gerado como:

      {ts '1997-01-01 00:00:00.000' }  
      
    • BCPKEEPIDENTITY

      Quando definido como TRUE, especifica que as funções de cópia em massa inserem valores de dados fornecidos para colunas com restrições de identidade. Se essa opção não for definida, novos valores de identidade serão gerados para as linhas inseridas.

    • BCPHINTS

      Especifica várias otimizações de cópia em massa. Essa opção não pode ser usada em versões 6.5 ou anteriores do SQL Server.

    • BCPFILECP

      Especifica a página de código do arquivo de cópia em massa.

    • BCPUNICODEFILE

      Especifica que um arquivo de cópia em massa em modo de caractere é um arquivo Unicode.

  • A função ODBC bcp_colfmt não dá suporte ao indicador file_type de SQLCHAR porque ela entra em conflito com o typedef SQLCHAR ODBC. Use SQLCHARACTER em vez disso para bcp_colfmt.

  • Nas versões ODBC de funções de cópia em massa, o formato para trabalhar com valores datetime e smalldatetime em cadeias de caracteres é o formato ODBC de aaaa-mm-dd hh:mm:ss.sss; Os valores smalldatetime usam o formato ODBC de aaaa-mm-dd hh:mm:ss.

    As versões da biblioteca de banco de dados das funções de cópia em massa aceitam valores datetime e smalldatetime em cadeias de caracteres usando vários formatos:

    • O formato padrão é mmm dd aaaa hh:mmxx onde xx é AM ou PM.

    • datetime e smalldatetime em qualquer formato suportado pela função dbconvert da biblioteca de banco de dados.

    • Quando a caixa Usar configurações internacionais está marcada na guia Opções da Biblioteca de Banco de Dados do Utilitário de Rede do Cliente do SQL Server, as funções de cópia em massa da Biblioteca de Banco de Dados também aceitam datas no formato de data regional definido para a configuração de localidade do registro do computador cliente.

    As funções de cópia em massa da biblioteca de banco de dados não aceitam os formatos datetime e smalldatetime ODBC.

    Se o atributo da instrução SQL_SOPT_SS_REGIONALIZE estiver definido como SQL_RE_ON, as funções de cópia em massa do ODBC aceitarão datas no formato de data regional definido para a configuração de localidade do registro do computador cliente.

  • Ao gerar valores monetários em formato de caracteres, as funções de cópia em massa ODBC fornecem quatro dígitos de precisão e nenhum separador de vírgula; As versões da biblioteca de banco de dados fornecem apenas dois dígitos de precisão e incluem os separadores de vírgula.

Confira também

Executando operações de cópia em massa (ODBC)
Funções de cópia em massa