IBCPSession::BCPInit(Native Client OLE DB Provider)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
Important
SQL Server Native Client(약칭 SNAC)는 SQL Server 2022(16.x) 및 SSMS(SQL Server Management Studio) 19에서 제거되었습니다. SQL Server Native Client OLE DB 공급자(SQLNCLI 또는 SQLNCLI11)와 레거시 Microsoft OLE DB Provider for SQL Server(SQLOLEDB)는 모두 새로운 개발에 권장되지 않습니다. 앞으로 SQL Server용 새 Microsoft OLE DB 드라이버(MSOLEDBSQL)로 전환합니다.
대량 복사 구조를 초기화하고, 오류 검사를 수행하고, 데이터 및 서식 파일 이름이 올바른지 확인한 다음, 엽니다.
구문
HRESULT BCPInit(
const wchar_t *pwszTable,
const wchar_t *pwszDataFile,
const wchar_t *pwszErrorFile,
int eDirection);
설명
BCPInit 메서드는 다른 대량 복사 메서드 앞에 호출되어야 합니다. BCPInit 메서드는 워크스테이션과 SQL Server 간의 대량 데이터 복사에 필요한 초기화를 수행합니다.
BCPInit 메서드는 데이터 파일이 아닌 데이터베이스 원본 또는 대상 테이블의 구조를 검사합니다. 데이터베이스 테이블, 뷰 또는 SELECT 결과 집합의 각 열을 기반으로 데이터 파일의 데이터 형식 값을 지정합니다. 이 사양에는 각 열의 데이터 형식, 데이터의 길이 또는 null 표시기 및 종결자 바이트 문자열의 존재 여부 및 고정 길이 데이터 형식의 너비가 포함됩니다. BCPInit 메서드는 다음과 같이 이러한 값을 설정합니다.
지정된 데이터 형식은 데이터베이스 테이블, 뷰 또는 SELECT 결과 집합에 있는 열의 데이터 형식입니다. 데이터 형식은 SQL Server Native Client 헤더 파일(sqlncli.h)에 지정된 SQL Server 네이티브 데이터 형식으로 열거됩니다. 이 값은 BCP_TYPE_XXX 패턴을 사용합니다. 데이터는 해당 컴퓨터 형식으로 표현됩니다. 즉, 정수 데이터 형식 열의 데이터는 데이터 파일을 만든 컴퓨터에 따라 big-or little-endian인 4 바이트 시퀀스로 표시됩니다.
데이터베이스 데이터 형식의 길이가 고정된 경우 데이터 파일 데이터도 길이가 고정됩니다. 데이터를 처리하는 대량 복사 메서드(예: IBCPSession::BCPExec)는 데이터 파일에 있는 데이터의 길이가 데이터베이스 테이블, 뷰 또는 SELECT 열 목록에 지정된 데이터의 길이와 동일할 것이라 예상하고 데이터 행을 구문 분석합니다. 예를 들어
char(13)
로 정의된 데이터베이스 열의 데이터에서 파일의 각 데이터 행은 13자로 표현되어야 합니다. 데이터베이스 열에서 null 값을 허용하는 경우 고정 길이 데이터에 null 표시기를 접두사로 지정할 수 있습니다.SQL Server에 데이터를 복사할 때 데이터 파일에는 데이터베이스 테이블의 각 열에 대한 데이터가 있어야 합니다. SQL Server에서 데이터를 복사할 때 데이터베이스 테이블, 뷰 또는 SELECT 결과 집합에 있는 모든 열의 데이터가 데이터 파일에 복사됩니다.
SQL Server에 데이터를 복사할 때 데이터 파일의 열 서수 위치는 데이터베이스 테이블에 있는 열의 서수 위치와 동일해야 합니다. SQL Server 에서 데이터를 복사할 때 BCPExec 메서드는 데이터베이스 테이블에 있는 열의 서수 위치에 따라 데이터를 배치합니다.
데이터베이스 데이터 형식이 길이(예
varbinary(22)
: 변수)이거나 데이터베이스 열에 null 값이 포함될 수 있는 경우 데이터 파일의 데이터에 길이/null 표시기가 접두사로 추가됩니다. 표시자의 길이는 데이터 형식 및 대량 복사 버전에 따라 다릅니다. IBCPSession::BCPControl 메서드 옵션 BCP_OPTION_FILEFMT 데이터의 표시기 너비가 예상보다 좁은 시기를 표시하여 이전 대량 복사 데이터 파일과 이후 버전의 SQL Server를 실행하는 서버 간의 호환성을 제공합니다.
참고 항목
데이터 파일에 지정된 데이터 형식 값을 변경하려면 IBCPSession::BCPColumns 및 IBCPSession::BCPColFmt 메서드를 사용합니다.
SQL Server에 대한 대량 복사는 데이터베이스 옵션 선택을 /bulkcopy로 설정하여 인덱스가 포함되지 않은 테이블에 최적화할 수 있습니다.
인수
pwszTable[in]
복사할 데이터베이스 테이블의 이름입니다. 이름에는 데이터베이스 이름 또는 소유자 이름이 포함될 수 있습니다. 예를 들어 "pubs.username.titles", "pubs.. titles", "username.titles".
eDirection 인수가 BCP_DIRECTION_OUT 설정된 경우 pwszTable 인수는 데이터베이스 뷰의 이름이 될 수 있습니다.
eDirection 인수가 BCP_DIRECTION_OUT 설정되고 BCPExec 메서드가 호출되기 전에 BCPControl 메서드를 사용하여 SELECT 문을 지정하는 경우 pwszTable 인수를 NULL로 설정해야 합니다.
pwszDataFile[in]
복사할 사용자 파일의 이름입니다.
pwszErrorFile[in]
사용자 파일에서 테이블로 복사할 수 없는 행의 진행률 메시지, 오류 메시지 및 복사본으로 채울 오류 파일의 이름입니다. pwszErrorFile 인수가 NULL로 설정된 경우 오류 파일이 사용되지 않습니다.
eDirection[in]
복사 작업의 방향(BCP_DIRECTION_IN 또는 BCP_DIRECTION _OUT. BCP_DIRECTION _IN 사용자 파일에서 데이터베이스 테이블로의 복사본을 나타냅니다. BCP_DIRECTION _OUT 데이터베이스 테이블에서 사용자 파일로의 복사본을 나타냅니다.
반환 코드 값
S_OK
메서드가 성공했습니다.
E_FAIL
공급자 관련 오류가 발생했습니다.' 자세한 내용은 ISQLServerErrorInfo 인터페이스를 사용합니다.
E_OUTOFMEMORY
메모리 부족 오류가 발생했습니다.
E_INVALIDARG
하나 이상의 인수가 잘못 지정되었습니다. 예를 들어 잘못된 파일 이름이 지정되었습니다.