初始化大容量复制结构,执行一些错误检查,验证数据和格式化文件名是否正确,然后打开它们。
语法
HRESULT BCPInit(
const wchar_t *pwszTable,
const wchar_t *pwszDataFile,
const wchar_t *pwszErrorFile,
inteDirection);
注解
应在任何其他大容量复制方法之前调用 BCPInit 方法。 BCPInit 方法对工作站和 SQL Server 之间的大容量数据副本执行必要的初始化。
BCPInit 方法检查数据库源表或目标表的结构,而不是数据文件。 它根据数据库表、视图或 SELECT 结果集中的每一列指定数据文件的数据格式值。 此规范包括每列的数据类型、数据中是否存在长度或 null 指示器和终止符字节字符串以及固定长度数据类型的宽度。 BCPInit 方法按如下所示设置这些值:
指定的数据类型是数据库表、视图或 SELECT 结果集中的列的数据类型。 数据类型由 SQL Server Native Client 头文件 (sqlncli.h) 中指定的 SQL Server 本机数据类型枚举。 它们的值采用BCP_TYPE_XXX模式。 数据以计算机形式表示。 也就是说,整数数据类型列中的数据由基于创建数据文件的计算机的大字节或小字节序列表示。
如果数据库数据类型的长度是固定的,则该数据文件中的数据长度也是固定的。 处理数据的大容量复制方法(例如 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 的大容量副本。
论据
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
未正确指定一个或多个参数。 例如,给定了无效的文件名。