IBCPSession::BCPColFmt(OLE DB)
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
프로그램 변수와 SQL Server 열 간에 바인딩을 만듭니다.
구문
HRESULT BCPColFmt(
DBORDINAL idxUserDataCol,
int eUserDataType,
int cbIndicator,
int cbUserData,
BYTE *pbUserDataTerm,
int cbUserDataTerm,
DBORDINAL idxServerCol);
설명
BCPColFmt 메서드는 BCP 데이터 파일 필드와 SQL Server 열 간에 바인딩을 만드는 데 사용됩니다. 열의 길이, 형식, 종결자 및 접두사 길이를 매개 변수로 사용하고 개별 필드에 대해 이러한 각 속성을 설정합니다.
사용자가 대화형 모드를 선택하면 이 메서드가 두 번 호출됩니다. 서버 열의 형식에 따라 기본값에 따라 열 형식을 설정하고 대화형 모드에서 선택한 클라이언트의 열 유형에 따라 각 열에 대해 형식을 설정하려면 한 번 설정합니다.
비대화형 모드에서는 각 열의 형식을 문자 또는 네이티브 형식으로 설정하고 열 및 행 종결자를 설정하기 위해 열당 한 번만 호출됩니다.
BCPColFmt 메서드를 사용하면 대량 복사본에 대한 사용자 파일 형식을 지정할 수 있습니다. 대량 복사의 경우 형식에는 다음 부분이 포함됩니다.
사용자 파일 필드에서 데이터베이스 열로의 매핑입니다.
각 사용자 파일 필드의 데이터 형식입니다.
각 필드에 대한 선택적 표시기의 길이입니다.
사용자 파일 필드당 최대 데이터 길이
각 필드 1에 대한 선택적 종료 바이트 시퀀스입니다.
선택적 종료 바이트 시퀀스 1의 길이입니다.
Important
[1]: 데이터 파일 코드 페이지가 UTF-8로 설정된 시나리오에서는 종결자 시퀀스를 사용할 수 없습니다. 이러한 시나리오에서는 pbUserDataTerm을 nullptr
로 설정하고 cbUserDataTerm을 0
으로 설정해야 합니다.
BCPColFmt에 대한 각 호출은 하나의 사용자 파일 필드에 대한 형식을 지정합니다. 예를 들어 5개 필드 사용자 데이터 파일에서 세 개의 필드에 대한 기본 설정을 변경하려면 먼저 호출BCPColumns(5)
한 다음 BCPColFmt를 5번 호출하고 그 중 세 번은 사용자 지정 형식을 설정합니다. 나머지 두 호출의 경우 eUserDataType을 BCP_TYPE_DEFAULT 설정하고 cbIndicator, cbUserData 및 cbUserDataTerm을 각각 0, BCP_VARIABLE_LENGTH 및 0으로 설정합니다. 이 프로시저는 다섯 개의 열을 모두 복사하는데 이 중 세 개는 사용자 지정된 형식으로, 두 개는 기본 형식으로 복사합니다.
참고 항목
BCPColFmt를 호출하기 전에 IBCPSession::BCPColumns 메서드를 호출해야 합니다. 사용자 파일의 각 열에 대해 BCPColFmt를 한 번 호출해야 합니다. 사용자 파일의 열에 대해 BCPColFmt 를 두 번 이상 호출하면 오류가 발생합니다.
사용자 파일의 모든 데이터를 SQL Server 테이블에 복사할 필요는 없습니다. 열을 건너뛰려면 idxServerCol 매개 변수를 0으로 설정하는 열에 대한 데이터 형식을 지정합니다. 필드를 건너뛰려면 메서드가 제대로 작동하려면 모든 정보가 필요합니다.
IBCPSession::BCPWriteFmt 함수를 사용하여 BCPColFmt를 통해 제공된 형식 지정을 저장할 수 있습니다.
인수
idxUserDataCol[in]
사용자 데이터 파일에 포함된 필드의 인덱스입니다.
eUserDataType[in]
사용자 데이터 파일에 포함된 필드의 데이터 형식입니다. 사용 가능한 데이터 형식은 OLE DB Driver for SQL Server 헤더 파일(msoledbsql.h)에 BCP_TYPE_XXX 형식(예: BCP_TYPE_SQLINT4)에 나열됩니다. BCP_TYPE_DEFAULT 값을 지정하면 공급자는 테이블 또는 뷰 열 형식과 동일한 형식을 사용하려고 합니다. eUserDataType 인수가 BCP_TYPE_SQLDECIMAL 또는 BCP_TYPE_SQLNUMERIC 경우 SQL Server에서 파일로 대량 복사 작업의 경우:
원본 열이 소수 또는 숫자가 아니면 기본 전체 자릿수와 소수 자릿수가 사용됩니다.
원본 열이 decimal 또는 numeric이면 원본 열의 전체 자릿수 및 소수 자릿수가 사용됩니다.
cbIndicator[in]
필드의 접두사 길이입니다. 기본값은 BCP_PREFIX_DEFAULT. 접두사에 유효한 길이는 0, 1, 2, 4 및 8입니다. 접두사 크기 8은 필드가 청크로 분할되었음을 나타내는 데 가장 일반적으로 사용됩니다. 이는 큰 값 형식 열을 효율적으로 대량 복사하는 데 사용됩니다.
cbUserData[in]
길이 표시기 또는 종결자의 길이를 포함하지 않고 사용자 파일에 있는 이 필드 데이터의 최대 길이(바이트)입니다.
cbUserData 를 BCP_LENGTH_NULL로 설정하면 데이터 파일 필드의 모든 값이 NULL이거나 NULL로 설정해야 함을 나타냅니다. cbUserData를 BCP_LENGTH_VARIABLE 설정하면 시스템에서 각 필드의 데이터 길이를 결정해야 합니다. 일부 필드의 경우 SQL Server의 복사본에 있는 데이터 앞에 길이/null 표시기가 생성되거나 SQL Server에 복사된 데이터에서 표시기가 예상됨을 의미할 수 있습니다.
SQL Server 문자 및 이진 데이터 형식 의 경우 cbUserData 는 BCP_LENGTH_VARIABLE, BCP_LENGTH_NULL, 0 또는 일부 양수 값일 수 있습니다. cbUserData가 BCP_LENGTH_VARIABLE 경우 시스템은 길이 표시기(있는 경우) 또는 종결자 시퀀스를 사용하여 데이터의 길이를 확인합니다. 길이 표시기와 종결자 시퀀스가 모두 제공된 경우 대량 복사는 복사되는 데이터의 양이 가장 적은 데이터를 사용합니다. cbUserData가 BCP_LENGTH_VARIABLE 경우 데이터 형식은 SQL Server 문자 또는 이진 형식이며 길이 표시기나 종결자 시퀀스를 지정하지 않으면 시스템에서 오류 메시지를 반환합니다.
cbUserData가 0이거나 양수이면 시스템에서 cbUserData를 최대 데이터 길이로 사용합니다. 그러나 양수 cbUserData 외에도 길이 표시기 또는 종결자 시퀀스가 제공되는 경우 시스템은 복사되는 데이터의 양이 가장 적은 메서드를 사용하여 데이터 길이를 결정합니다.
cbUserData 값은 데이터 바이트 수를 나타냅니다. 문자 데이터가 유니코드 와이드 문자로 표현되는 경우 양수 cbUserData 매개 변수 값은 문자 수와 각 문자의 바이트 크기를 곱한 값을 나타냅니다.
pbUserDataTerm[size_is][in]
필드에 사용할 종결자 시퀀스입니다. 이 매개 변수는 다른 모든 형식이 고정 길이이거나 이진 데이터의 경우 존재하는 바이트 수를 정확하게 기록하기 위해 길이 표시기가 필요하기 때문에 문자 데이터 형식에 주로 유용합니다.
추출된 데이터가 종료되지 않도록 하거나 사용자 파일의 데이터가 종료되지 않았음을 나타내려면 이 매개 변수를 NULL로 설정합니다.
사용자 파일 열 길이를 지정하는 방법을 두 개 이상 사용하는 경우(예: 종결자 및 길이 표시기, 종결자 및 최대 열 길이) 대량 복사에서 복사되는 데이터의 양이 가장 적은 방법을 선택합니다.
대량 복사 API는 필요에 따라 유니코드-MBCS 문자 변환을 수행합니다. 종결자 바이트 문자열과 바이트 문자열의 길이가 모두 올바르게 설정되도록 주의해야 합니다. UTF-8 인코딩 제한 사항은 위의 설명 섹션을 참조하세요.
cbUserDataTerm[in]
열에 사용할 종결자 시퀀스의 길이(바이트)입니다. 데이터에 종결자가 없거나 원하는 경우 이 값을 0으로 설정합니다. UTF-8 인코딩 제한 사항은 위의 설명 섹션을 참조하세요.
idxServerCol[in]
데이터베이스 테이블에 있는 열의 서수 위치입니다. 첫 번째 열 번호는 1입니다. 열의 서수 위치는 IColumnsInfo::GetColumnInfo 또는 이와 유사한 메서드를 사용하여 확인할 수 있습니다. 이 값이 0이면 대량 복사에서 데이터 파일의 필드를 무시합니다.
반환 코드 값
S_OK
메서드가 성공했습니다.
E_FAIL
공급자 관련 오류가 발생했습니다. 자세한 내용은 ISQLServerErrorInfo 인터페이스를 사용합니다.
E_UNEXPECTED
예기치 않은 메서드가 호출되었습니다. 예를 들어 이 메서드를 호출하기 전에 IBCPSession::BCPInit 메서드를 호출하지 않았습니다.
E_INVALIDARG
잘못된 인수입니다.
E_OUTOFMEMORY
메모리 부족 오류입니다.