bcp_exec
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
데이터베이스 테이블과 사용자 파일 간에 데이터에 대한 전체 대량 복사를 실행합니다.
구문
RETCODE bcp_exec (
HDBC hdbc,
LPDBINT pnRowsProcessed);
인수
hdbc
대량 복사 사용 ODBC 연결 핸들입니다.
pnRowsProcessed
DBINT에 대한 포인터입니다. bcp_exec 함수는 성공적으로 복사된 행 수로 이 DBINT를 채웁니다. pnRowsProcessed가 NULL이면 bcp_exec 무시됩니다.
반품
성공, SUCCEED_ASYNC 또는 FAIL. bcp_exec 함수는 모든 행이 복사되면 SUCCEED를 반환합니다. bcp_exec 비동기 대량 복사 작업이 여전히 미해결 상태이면 SUCCEED_ASYNC 반환합니다. bcp_exec 전체 오류가 발생하거나 오류를 생성하는 행 수가 bcp_control 사용하여 BCPMAXERRS에 지정된 값에 도달하는 경우 FAIL을 반환합니다. BCPMAXERRS의 기본값은 10입니다. BCPMAXERRS 옵션은 데이터 파일에서 행을 읽는 동안 공급자가 검색한 구문 오류에만 영향을 줍니다(서버로 전송된 행이 아님). 서버는 행이 있는 오류를 감지하면 일괄 처리를 중단합니다. pnRowsProcessed 매개 변수에서 성공적으로 복사된 행 수를 확인합니다.
설명
이 함수는 bcp_init 의 eDirection매개 변수 값에 따라 사용자 파일에서 데이터베이스 테이블로 또는 데이터베이스 테이블에서 사용자 파일로 데이터를 복사합니다.
bcp_exec 호출하기 전에 유효한 사용자 파일 이름으로 bcp_init 호출합니다. 이렇게 하지 않으면 오류가 발생합니다.
bcp_exec 는 무한정 보류될 수 있는 유일한 대량 복사 함수입니다. 따라서 비동기 모드를 지원하는 유일한 대량 복사 함수입니다. 비동기 모드를 설정하려면 SQLSetConnectAttr를 사용하여 bcp_exec 호출하기 전에 SQL_ATTR_ASYNC_ENABLE SQL_ASYNC_ENABLE_ON 설정합니다. 완료를 테스트하려면 동일한 매개 변수를 사용하여 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.