bcp_exec

Aplica-se a: SQL ServerBase de Dados SQL do AzureAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)

Executa uma cópia em massa completa dos dados entre uma tabela de base de dados e um ficheiro de utilizador.

Syntax

  
RETCODE bcp_exec (  
        HDBC hdbc,  
        LPDBINT pnRowsProcessed);  

Arguments

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

pnRowsProcessed
É um indicador para um DBINT. A função bcp_exec preenche este DBINT com o número de linhas copiadas com sucesso. Se pnRowsProcessed for NULL, é ignorado por bcp_exec.

Devoluções

TER SUCESSO, SUCCEED_ASYNC ou FALHAR. A função bcp_exec devolve SUCCEED se todas as linhas forem copiadas. bcp_exec devolve SUCCEED_ASYNC se uma operação de cópia em massa assíncrona ainda estiver pendente. bcp_exec devolve FAIL se ocorrer uma falha completa, ou se o número de linhas que geram erros atingir o valor especificado para BCPMAXERRS usando bcp_control. O BCPMAXERRS por defeito é 10. A opção BCPMAXERRS afeta apenas os erros de sintaxe detetados pelo fornecedor ao ler as linhas do ficheiro de dados (e não as linhas enviadas para o servidor). O servidor aborta o lote quando deteta um erro numa linha. Verifique o parâmetro pnRowsProcessed para o número de linhas copiadas com sucesso.

Observações

Esta função copia dados de um ficheiro de utilizador para uma tabela de base de dados ou vice-versa, dependendo do valor do parâmetro eDirection em bcp_init.

Antes de bcp_exec, ligue para bcp_init com um nome de ficheiro de utilizador válido. Se não o fizer, registar-se-á um erro.

bcp_exec é a única função de cópia em massa que provavelmente estará pendente durante algum tempo. É, portanto, a única função de cópia em massa que suporta o modo assíncrono. Para definir o modo assíncrono, use o SQLSetConnectAttr para definir SQL_ATTR_ASYNC_ENABLE para SQL_ASYNC_ENABLE_ON antes de chamar bcp_exec. Para testar a conclusão, chame-bcp_exec com os mesmos parâmetros. Se a cópia em massa ainda não estiver concluída, bcp_exec devolve SUCCEED_ASYNC. Também devolve em pnRowsProcessed uma contagem de estado do número de linhas enviadas para o servidor. As linhas enviadas para o servidor não são comprometidas até que o fim de um lote seja alcançado.

Para informações sobre uma alteração urgente na cópia em massa a partir do SQL Server 2005 (9.x), veja Realizar Operações de Cópia em Massa (ODBC).

Exemplo

O exemplo seguinte mostra como usar bcp_exec:

// Variables like henv not specified.  
HDBC      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("pubs..authors"), _T("authors.sav"), NULL, DB_OUT)  
   == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Now, execute the bulk copy.   
if (bcp_exec(hdbc, &nRowsProcessed) == FAIL)  
   {  
   if (nRowsProcessed == -1)  
      {  
      printf_s("No rows processed on bulk copy execution.\n");  
      }  
   else  
      {  
      printf_s("Incomplete bulk copy.   Only %ld row%s copied.\n",  
         nRowsProcessed, (nRowsProcessed == 1) ? "": "s");  
      }  
   return;  
   }  
  
printf_s("%ld rows processed.\n", nRowsProcessed);  
  
// Carry on.