bcp_setcolfmt函数取代了bcp_colfmt。 在指定列排序规则时,必须使用 bcp_setcolfmt 函数。 bcp_setbulkmode 可用于指定多个列格式。
此函数提供了一种灵活的方法,用于在大容量复制作中指定列格式。 它用于设置单独的列格式属性。 每次调用 bcp_setcolfmt 设置一个列格式属性。
bcp_setcolfmt函数指定用户文件中数据的源或目标格式。 用作源格式时, bcp_setcolfmt 指定用作 SQL Server 中表的数据数据源的现有数据文件的格式。 用作目标格式时,将使用 通过bcp_setcolfmt指定的列格式创建数据文件。
语法
RETCODE bcp_setcolfmt (
HDBC
hdbc
,
INT
field
,
INT
property
,
void*
pValue
,
INT
cbValue
);
论据
hdbc
已启用大容量复制的 ODBC 连接句柄。
田
要为其设置属性的序号列号。
财产
是属性常量之一。 在此表中定义属性常量。
| 资产 | 价值 | DESCRIPTION |
|---|---|---|
| BCP_FMT_TYPE | 字节 | 用户文件中此列的数据类型。 如果不同于数据库表中相应列的数据类型,则大容量复制可根据需要转换数据。 BCP_FMT_TYPE参数由 sqlncli.h 中的 SQL Server 数据类型标记而不是 ODBC C 数据类型枚举器枚举。 例如,可以使用特定于 SQL Server 的 SQLCHARACTER 类型指定字符串、ODBC 类型SQL_C_CHAR。 若要指定 SQL Server 数据类型的默认数据表示形式,请将此参数设置为 0。 对于从 SQL Server 大容量复制到文件中,当BCP_FMT_TYPE为 SQLDECIMAL 或 SQLNUMERIC 时: - 如果源列不是 十进制 列或 数字列,则使用默认精度和小数位数。 - 如果源列是 小数 或 数值,则使用源列的精度和小数位数。 |
| BCP_FMT_INDICATOR_LEN | INT | 指示符(前缀)的长度(以字节为单位)。 它是列数据中长度/null 指示器的长度(以字节为单位)。 有效的指示器长度值为 0(不使用指示器时)、1、2 或 4。 若要指定默认大容量复制指示器用法,请将此参数设置为SQL_VARLEN_DATA。 指示器在内存中直接显示在任何数据之前,在数据文件中直接显示在它们应用到的数据之前。 如果使用了多个指定数据文件列长度的方法(例如指示器和最大列长度或指示器和终止符序列),则大容量复制选择导致复制的数据量最少的方法。 当用户干预调整数据格式时,大容量复制生成的数据文件在列数据长度可能有所不同时调整数据格式,或者列可以接受 NULL 作为值。 |
| BCP_FMT_DATA_LEN | DBINT | 数据的长度(列长度) 它是用户文件中此列数据的最大长度(以字节为单位),不包括任何长度指示器或终止符的长度。 将BCP_FMT_DATA_LEN设置为SQL_NULL_DATA表示数据文件列中的所有值都为 NULL 或应设置为 NULL。 将BCP_FMT_DATA_LEN设置为SQL_VARLEN_DATA表示系统应确定每列中数据的长度。 对于某些列,这可能意味着在从 SQL Server 复制的副本之前生成长度/null 指示器,或指示符在复制到 SQL Server 的数据中预期。 对于 SQL Server 字符和二进制数据类型,BCP_FMT_DATA_LEN可以是SQL_VARLEN_DATA、SQL_NULL_DATA、0 或某些正值。 如果BCP_FMT_DATA_LEN SQL_VARLEN_DATA,系统将使用长度指示器(如果存在)或终止符序列来确定数据的长度。 如果同时提供长度指示器和终止符序列,则大容量复制使用导致复制的数据量最少的序列。 如果BCP_FMT_DATA_LEN SQL_VARLEN_DATA,则数据类型为 SQL Server 字符或二进制类型,并且未指定长度指示器或终止符序列,系统将返回错误消息。 如果BCP_FMT_DATA_LEN为 0 或正值,则系统将BCP_FMT_DATA_LEN用作最大数据长度。 但是,如果除了正BCP_FMT_DATA_LEN外,还提供了长度指示器或终止符序列,则系统通过使用导致复制的数据量最少的方法来确定数据长度。 BCP_FMT_DATA_LEN值表示数据的字节数。 如果字符数据由 Unicode 宽字符表示,则正BCP_FMT_DATA_LEN参数值表示字符数乘以每个字符的大小(以字节为单位)。 |
| BCP_FMT_TERMINATOR | LGBTYTE | 指向要用于此列的终止符序列(ANSI 或 Unicode)的指针。 此参数主要用于字符数据类型,因为所有其他类型都是固定长度,或者,对于二进制数据,需要长度指示器来准确记录存在的字节数。 若要避免终止提取的数据,或指示用户文件中的数据未终止,请将此参数设置为 NULL。 如果使用了多个指定用户文件列长度的方法(例如终止符和长度指示器或终止符和最大列长度),则大容量复制选择导致复制的数据量最少的列。 大容量复制 API 根据需要执行 Unicode 到 MBCS 的字符转换。 必须确保正确设置终止符字节字符串和字节字符串的长度。 |
| BCP_FMT_SERVER_COL | INT | 数据库中列的序号位置 |
| BCP_FMT_COLLATION | LPCSTR | 排序规则名称。 |
pValue
指向要与 属性关联的值的指针。 它允许单独设置每个列格式属性。
cbvalue
属性缓冲区的长度(以字节为单位)。
退货
SUCCEED 或 FAIL。
注解
此函数取代 bcp_colfmt 函数。 bcp_setcolfmt 函数中提供了bcp_colfmt的所有功能。 此外,还提供了对列排序规则的支持。 建议按以下给定的顺序设置以下列格式属性:
BCP_FMT_SERVER_COL
BCP_FMT_DATA_LEN
BCP_FMT_TYPE
使用 bcp_setcolfmt 函数可以指定大容量副本的用户文件格式。 对于大容量复制,格式包含以下部分:
从用户文件列到数据库列的映射。
每个用户文件列的数据类型。
每个列的可选指示器的长度。
每个用户文件列的最大数据长度。
每个列的可选终止字节序列。
可选终止字节序列的长度。
每次调用 bcp_setcolfmt 指定一个用户文件列的格式。 例如,若要更改五列用户数据文件中三列的默认设置,请先调用 bcp_columns(5),然后调用 bcp_setcolfmt 五次,其中三个调用设置自定义格式。 对于其余两个调用,请将BCP_FMT_TYPE设置为 0,并将 BCP_FMT_INDICATOR_LENGTH、BCP_FMT_DATA_LEN 和 cbValue 分别设置为 0、SQL_VARLEN_DATA 和 0。 此过程复制所有五列,三列具有自定义格式,两列是默认格式。
在调用 bcp_setcolfmt 之前,必须调用 bcp_columns函数。
必须为用户文件中每个列的每个属性调用 bcp_setcolfmt 一次。
无需将用户文件中的所有数据复制到 SQL Server 表。 若要跳过列,请指定列的数据格式,将BCP_FMT_SERVER_COL参数设置为 0。 如果要跳过列,则必须指定其类型。
bcp_writefmt函数可用于保留格式规范。
bcp_setcolfmt对增强日期和时间功能的支持
日期/时间类型的BCP_FMT_TYPE属性中使用的类型在 增强日期和时间类型的大容量复制更改(OLE DB 和 ODBC)中指定。
有关详细信息,请参阅日期和时间改进(ODBC)。