Specifies the source or target format of the data in a user file. When used as a source format, bcp_colfmt specifies the format of an existing data file used as the source of data in a bulk copy to a Microsoft® SQL Server™ table. When used as a target format, the data file is created using the column formats specified with bcp_colfmt.
RETCODE bcp_colfmt (
HDBC hdbc,
INT idxUserDataCol,
BYTE eUserDataType,
INT cbIndicator,
DBINT cbUserData,
LPCBYTE pUserDataTerm,
INT cbUserDataTerm,
INT idxServerCol );
The eUserDataType parameter is enumerated by the SQL Server data type tokens in Odbcss.h, not the ODBC C data type enumerators. For example, you can specify a character string, ODBC type SQL_C_CHAR, using the SQL Server-specific type SQLCHARACTER.
To specify the default data representation for the SQL Server data type, set this parameter to 0.
For a bulk copy out of SQL Server into a file, when eUserDataType is SQLDECIMAL or SQLNUMERIC:
To specify default bulk copy indicator usage, set this parameter to SQL_VARLEN_DATA.
Indicators appear in memory directly before any data, and in the data file directly before the data to which they apply.
If more than one means of specifying a data file column length is used (such as an indicator and a maximum column length, or an indicator and a terminator sequence), bulk copy chooses the one that results in the least amount of data being copied.
Data files generated by bulk copy when no user intervention adjusts the format of the data contain indicators when the column data can vary in length or the column can accept NULL as a value.
Setting cbUserData to SQL_NULL_DATA indicates that all values in the data file column are, or should be set to NULL.
Setting cbUserData to SQL_VARLEN_DATA indicates that the system should determine the length of data in each column. For some columns, this could mean that a length/null indicator is generated to precede data on a copy from SQL Server, or that the indicator is expected in data copied to SQL Server.
For SQL Server character and binary data types, cbUserData can be SQL_VARLEN_DATA, SQL_NULL_DATA, 0, or some positive value. If cbUserData is SQL_VARLEN_DATA, the system uses either the length indicator, if present, or a terminator sequence to determine the length of the data. If both a length indicator and a terminator sequence are supplied, bulk copy uses the one that results in the least amount of data being copied. If cbUserData is SQL_VARLEN_DATA, the data type is a SQL Server character or binary type, and neither a length indicator nor a terminator sequence is specified, the system returns an error message.
If cbUserData is 0 or a positive value, the system uses cbUserData as the maximum data length. However, if, in addition to a positive cbUserData, a length indicator or terminator sequence is provided, the system determines the data length by using the method that results in the least amount of data being copied.
The cbUserData value represents the count of bytes of data. If character data is represented by Unicode wide characters, then a positive cbUserData parameter value represents the number of characters multiplied by the size, in bytes, of each character.
To avoid terminating extracted data, or to indicate that data in a user file is not terminated, set this parameter to NULL.
If more than one means of specifying a user-file column length is used (such as a terminator and a length indicator, or a terminator and a maximum column length), bulk copy chooses the one that results in the least amount of data being copied.
The bulk copy API performs Unicode-to-MBCS character conversion as required. Care must be taken to ensure that both the terminator byte string and the length of the byte string are set correctly.
If this value is 0, bulk copy ignores the column in the data file.
SUCCEED or FAIL.
The bcp_colfmt function allows you to specify the user-file format for bulk copies. For bulk copy, a format contains the following parts:
Each call to bcp_colfmt specifies the format for one user-file column. For example, to change the default settings for three columns in a five-column user data file, first call bcp_columns(5), and then call bcp_colfmt five times, with three of those calls setting your custom format. For the remaining two calls, set eUserDataType to 0, and set cbIndicator, cbUserData, and cbUserDataTerm to 0, SQL_VARLEN_DATA, and 0 respectively. This procedure copies all five columns, three with your customized format and two with the default format.
The bcp_columns function must be called before any calls to bcp_colfmt.
You must call bcp_colfmt once for each column in the user file.
Calling bcp_colfmt more than once for any user-file column causes an error.
You do not need to copy all data in a user file to the SQL Server table. To skip a column, specify the format of the data for the column, setting the idxServerCol parameter to 0. If you want to skip a column, you must specify its type.
The bcp_writefmt function can be used to persist the format specification.
bcp_batch | bcp_done |
bcp_bind | bcp_exec |
bcp_collen | bcp_init |
bcp_colptr | bcp_sendrow |
bcp_columns | bcp_writefmt |
bcp_control | SQLColumns |