bcp_exec

Применимо к:SQL ServerAzure SQL DatabaseAzure Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Выполняет полное массовое копирование данных из пользовательского файла в таблицу базы данных или обратно.

Синтаксис

  
RETCODE bcp_exec (  
        HDBC hdbc,  
        LPDBINT pnRowsProcessed);  

Аргументы

hdbc
Дескриптор соединения ODBC с поддержкой массового копирования.

pnRowsProcessed
Указатель на переменную DBINT. Функция bcp_exec заполняет DBINT числом успешно скопированных строк. Если значение параметра pnRowsProcessed равно NULL, то оно не учитывается функцией bcp_exec.

Возвраты

SUCCEED, SUCCEED_ASYNC или FAIL. Функция bcp_exec возвращает значение SUCCEED, если были скопированы все строки. Если асинхронная операция массового копирование еще не завершена, то функцияbcp_exec возвращает значение SUCCEED_ASYNC. Функцияbcp_exec возвращает значение FAIL, если возникла неисправимая ошибка либо если число ошибочных строк достигло значения, заданного в параметре BCPMAXERRS с помощью программы bcp_control. Значение BCPMAXERRS по умолчанию равно 10. Параметр BCPMAXERRS относится только к синтаксическим ошибкам, обнаруживаемым поставщиком при чтении строк из файла данных (а не к строкам, отправляемым на сервер). Сервер прерывает выполнение пакета при обнаружении ошибки в строке. Проверьте параметр pnRowsProcessed , чтобы получить число успешно скопированных строк.

Замечания

Эта функция копирует данные из пользовательского файла в таблицу базы данных или наоборот в зависимости от значения параметра eDirection в функции bcp_init.

Перед вызовом функции bcp_execнеобходимо вызвать функцию bcp_init с допустимым именем пользовательского файла. Несоблюдение этого правила приведет к ошибке.

Функцияbcp_exec представляет собой только функцию массового копирования, которая с большой долей вероятности остается необработанной в течение неограниченного отрезка времени. Вот почему это единственная функция массового копирования, поддерживающая асинхронный режим. Для установки асинхронного режима используется функция SQLSetConnectAttr , чтобы выставить атрибуту SQL_ATTR_ASYNC_ENABLE значение SQL_ASYNC_ENABLE_ON перед вызовом функции bcp_exec. Для проверки завершения копирования необходимо вызвать функцию bcp_exec с такими же параметрами. Если массовое копирование еще не завершено, функция bcp_exec возвращает значение SUCCEED_ASYNC. Она также возвращает в параметре pnRowsProcessed состояние счетчика числа строк, которые были отправлены серверу. Строки, отправленные на сервер, не фиксируются до тех пор, пока не будет достигнут конец пакета.

Сведения о критическом изменении массового копирования, начиная с SQL Server 2005 (9.x), см. в разделе "Выполнение операций массового копирования( ODBC)".

пример

Следующий пример иллюстрирует использование функции 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.  

См. также

Функции массового копирования