Compartilhar via


bcp_control

Altera as configurações padrão de vários parâmetros de controle para uma cópia em massa entre um arquivo e o SQL Server.

Sintaxe

RETCODE bcp_control ( 
        HDBC hdbc, 
        INT eOption, 
        void* iValue);

Argumentos

  • hdbc
    É o identificador de conexão ODBC habilitado para cópia em massa.

  • eOption
    É um dos seguintes:

  • BCPABORT
    Para uma operação de cópia em massa que já está em andamento. Chame bcp_control com um eOption de BCPABORT de outro thread para interromper uma operação de cópia em massa em execução. O parâmetro iValue é ignorado.

  • BCPBATCH
    É o número de linhas por lote. O padrão é 0, que indica todas as linhas de uma tabela, quando os dados estão sendo extraídos, ou todas as linhas no arquivo de dados do usuário, quando os dados estão sendo copiados para um SQL Server. Um valor menor que 1 redefine BCPBATCH para o padrão.

  • BCPDELAYREADFMT
    Um Booliano, se definido como true, fará com que bcp_readfmt leia na execução. Se false (o padrão), bcp_readfmt lerá o arquivo de formato imediatamente. Ocorrerá um erro de sequência, se BCPDELAYREADFMT for true e você chamar bcp_columns ou bcp_setcolfmt.

    Também ocorrerá um erro de sequência, se você chamar bcp_control(hdbc, BCPDELAYREADFMT, (void *)FALSE) depois de chamar bcp_control(hdbc, BCPDELAYREADFMT, (void *)TRUE) e bcp_writefmt.

    Para obter mais informações, consulte Descoberta de metadados.

  • BCPFILECP
    iValue contém o número da página de código do arquivo de dados. Você pode especificar o número da página de código, como 1252 ou 850, ou como um destes valores:

    BCPFILE_ACP: os dados do arquivo estão na página de código do Microsoft Windows® do cliente.

    BCPFILE_OEMCP: os dados do arquivo estão na página de código OEM do cliente (padrão).

    BCPFILE_RAW: os dados do arquivo estão na página de código do SQL Server.

  • BCPFILEFMT
    O número da versão do formato de arquivo de dados. Pode ser 80 (SQL Server 2000), 90 (SQL Server 2005), 100 (SQL Server 2008 ou SQL Server 2008 R2) ou 110 (SQL Server 2012). 110 é o padrão. Isso é útil para exportar e importar dados em formatos que tinham suporte em versões anteriores do servidor. Por exemplo, para importar dados que eram obtidos de uma coluna de texto em um servidor SQL Server 2000 para uma coluna varchar(max) em um servidor SQL Server 2005 ou posterior, você deve especificar 80. De modo semelhante, se você especificar 80 ao exportar dados de uma coluna varchar(max), eles serão salvos exatamente como as colunas de texto são salvas no formato SQL Server 2000 e podem ser importados para uma coluna de texto de um servidor SQL Server 2000.

  • BCPFIRST
    É a primeira linha de dados a ser copiada em um arquivo ou tabela. O padrão é 1; um valor menor que 1 redefine essa opção para seu valor padrão.

  • BCPFIRSTEX
    Para operações de saída BCP, especifica a primeira linha da tabela do banco de dados a ser copiada no arquivo de dados.

    Para BCP em operações, especifica a primeira linha do arquivo de dados a ser copiada na tabela de banco de dados.

    É esperado que o parâmetro iValue seja o endereço de um inteiro de 64 bits assinado que contém o valor. O valor máximo que pode ser passado a BCPFIRSTEX é 2^63-1.

  • BCPFMTXML
    Especifica que o arquivo de formato gerado deve estar no formato XML. Eles está desativado por padrão.

    Os arquivos de formato XML apresentam maior flexibilidade, mas com alguns restrições adicionadas. Por exemplo, você não pode especificar o prefixo e o terminador para um campo simultaneamente, o que era possível nos arquivos de formato mais antigos.

    ObservaçãoObservação

    Os arquivos de formato XML só são suportados quando SQL Server é instalado junto com o SQL Server Native Client.

  • BCPHINTS
    iValue contém um ponteiro para a cadeia de caracteres SQLTCHAR. A cadeia de caracteres endereçada especifica dicas de processamento da cópia em massa do SQL Server ou uma instrução Transact-SQL que retorna um conjunto de resultados. Se uma instrução Transact-SQL especificada retornar mais de um conjunto de resultados, todos os conjuntos de resultados depois do primeiro serão ignorados. Para obter mais informações sobre dicas de processamento de cópia em massa, consulte o Utilitário bcp.

  • BCPKEEPIDENTITY
    Quando iValue for TRUE, especifica que as funções de cópia em massa inserem valores de dados fornecidos para colunas do SQL Server definidas com uma restrição de identidade. O arquivo de entrada deve fornecer valores para as colunas de identidade. Se essa opção não for definida, novos valores de identidade serão gerados para as linhas inseridas. Quaisquer dados contidos no arquivo para as colunas de identidade serão ignorados.

  • BCPKEEPNULLS
    Especifica se valores de dados vazios no arquivo serão convertidos em valores NULL na tabela SQL Server. Quando iValue for TRUE, valores vazios serão convertidos em NULL na tabela SQL Server. O padrão será converter valores vazios em um valor padrão para a coluna na tabela do SQL Server se houver um padrão.

  • BCPLAST
    É a última linha a ser copiada. O padrão é copiar todas as linhas; um valor menor que 1 redefine essa opção para seu padrão.

  • BCPLASTEX
    Para operações de saída BCP, especifica a última linha da tabela do banco de dados a ser copiada no arquivo de dados.

    Para BCP em operações, especifica a última linha do arquivo de dados a ser copiada na tabela do banco de dados.

    É esperado que o parâmetro iValue seja o endereço de um inteiro de 64 bits assinado que contém o valor. O valor máximo que pode ser passado para BCPLASTEX é 2^63-1.

  • BCPMAXERRS
    É o número de erros permitido antes de ocorrer uma falha na operação de cópia em massa. O padrão é 10; um valor menor que 1 redefine esta opção para seu padrão. A cópia em massa impõe um máximo de 65.535 erros. Uma tentativa de definir esta opção como um valor maior que 65.535 resulta na definição da opção como 65.535.

  • BCPODBC
    Quando TRUE, especifica que os valores datetime e smalldatetime salvos no formato de caractere usarão os prefixos e sufixos da sequência de escape de carimbo de data/hora ODBC. A opção BCPODBC só se aplica a BCP_OUT.

    Quando FALSE, um valor datetime que representa 1 de janeiro de 1997 é convertido na cadeia de caracteres: 1997-01-01 00:00:00.000. Quando TRUE, o mesmo valor datetime é representado como: {ts 1997-01-01 00:00:00.000'}.

  • BCPROWCOUNT
    Retorna o número de linhas afetadas pela operação BCP atual (ou última).

  • BCPTEXTFILE
    Quando TRUE, especifica que o arquivo de dados é um arquivo de texto, em vez de um arquivo binário. Se o arquivo for um arquivo de texto, BCP determinará se ele é ou não Unicode, verificando o marcador de bytes Unicode nos dois primeiros bytes do arquivo de dados.

  • BCPUNICODEFILE
    Quando TRUE, especifica que o arquivo de entrada é um arquivo Unicode.

  • iValue
    É o valor do eOption especificado. iValue é um valor inteiro (LONGLONG) convertido em um ponteiro nulo para permitir expansão futura para valores de 64 bits.

Retorna

SUCCEED ou FAIL.

Comentários

Esta função define vários parâmetros de controle para operações de cópia em massa, incluindo o número de erros permitido antes do cancelamento de uma cópia em massa, os número da primeira e da última linhas a serem copiadas de um arquivo de dados e o tamanho do lote.

Esta função é usada também para especificar a instrução SELECT durante uma operação de cópia em massa de saída do conjunto de resultados do SQL Server de uma SELECT. Defina eOption como BCPHINTS e defina iValue para ter um ponteiro para uma cadeia de caracteres SQLTCHAR que contém a instrução SELECT.

Esses parâmetros de controle só são úteis ao fazer cópias entre um arquivo de usuário e uma tabela SQL Server. As configurações de parâmetro de controle não têm qualquer efeito nas linhas copiadas para SQL Server com bcp_sendrow.

Exemplo

// Variables like henv not specified.
SQLHDBC      hdbc;
DBINT      nRowsProcessed;
 
// Application initiation, get an ODBC environment handle, allocate the
// hdbc, and so on.
... 

// Enable bulk copy prior to connecting on allocated hdbc.
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (SQLPOINTER) SQL_BCP_ON,
   SQL_IS_INTEGER);

// Connect to the data source, return on error.
if (!SQL_SUCCEEDED(SQLConnect(hdbc, _T("myDSN"), SQL_NTS,
   _T("myUser"), SQL_NTS, _T("myPwd"), SQL_NTS)))
   {
   // Raise error and return.
   return;
   }

// Initialize bulk copy. 
if (bcp_init(hdbc, _T("address"), _T("address.add"), _T("addr.err"),
   DB_IN) == FAIL)
   {
   // Raise error and return.
   return;
   }

// Set the number of rows per batch. 
if (bcp_control(hdbc, BCPBATCH, (void*) 1000) == FAIL)
   {
   // Raise error and return.
   return;
   }

// Set file column count. 
if (bcp_columns(hdbc, 1) == FAIL)
   {
   // Raise error and return.
   return;
   }

// Set the file format. 
if (bcp_colfmt(hdbc, 1, 0, 0, SQL_VARLEN_DATA, '\n', 1, 1)
   == FAIL)
   {
   // Raise error and return.
   return;
   }

// Execute the bulk copy. 
if (bcp_exec(hdbc, &nRowsProcessed) == FAIL)
   {
   // Raise error and return.
   return;
   }

printf_s("%ld rows processed by bulk copy.", nRowsProcessed);

Consulte também

Referência

Funções de cópia em massa