bcp_exec

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse Analytics

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.