IBCPSession::BCPControl (OLE DB)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

下载 OLE DB 驱动程序

设置大容量复制操作的选项。

语法

  
HRESULT BCPControl(   
      int eOption,  
      void *iValue);  

备注

BCPControl 方法设置用于大容量复制操作的各种控制参数,其中包括取消大容量复制之前允许的错误数、要从数据文件中复制的第一行和最后一行的行数和批量大小 。

从 SQL Server 大容量复制数据时,此方法还可用于指定要使用的 SELECT 语句。 可将 eOption 参数设置为 BCP_OPTION_HINTS,并将 iValue 参数设置为具有一个指针,该指针指向包含该 SELECT 语句的宽字符串 。

eOption 的可能值为:

选项 说明
BCP_OPTION_ABORT 停止正在进行的大容量复制操作。 可以从其他线程调用 eOption 参数为 BCP_OPTION_ABORT 的 BCPControl 方法,以停止正在运行的大容量复制操作 。 忽略 iValue 参数。
BCP_OPTION_BATCH 每批的行数。 默认值为 0,在提取数据时,该默认值表示表中的所有行;在将数据复制到 SQL Server 时,该默认值表示用户数据文件中的所有行。 值小于 1 则将 BCP_OPTION_BATCH 重置为默认值。
BCP_OPTION_DELAYREADFMT 一个布尔值,如果设置为 true,将导致 IBCPSession::BCPReadFmt 在执行时读取该值。 如果为 false(默认值),IBCPSession::BCPReadFmt 将立即读取格式化文件。 如果 BCP_OPTION_DELAYREADFMT 为 true,并且调用 IBCPSession::BCPColumns 或 IBCPSession::BCPColFmt,则会发生序列错误。

如果在调用 IBCPSession::BCPControl(BCPDELAYREADFMT, (void *)TRUE) 和 IBCPSession::BCPWriteFmt 后调用 IBCPSession::BCPControl(BCPDELAYREADFMT, (void *)FALSE)),同样会发生序列错误。

有关详细信息,请参阅元数据发现
BCP_OPTION_FILECP iValue 参数包含数据文件的代码页的编号 。 可以指定代码页的编号,例如 1252 或 850,或者采用以下值之一:

BCP_FILECP_ACP:文件中的数据位于客户端的 Microsoft Windows� 代码页中。

BCP_FILECP_OEMCP:文件中的数据位于客户端的 OEM 代码页中(默认值)。

BCP_FILECP_RAW:文件中的数据位于 SQL Server 的代码页中。
BCP_OPTION_FILEFMT 数据文件格式的版本号。 该版本号可以是 80 (SQL Server 2000 (8.x))、90 (SQL Server 2005 (9.x))、100(SQL Server 2008 (10.0.x) 或 SQL Server 2008 R2 (10.50.x)),或 110 (SQL Server 2012 (11.x))。 默认值为 110。 对于采用服务器早期版本所支持的格式的数据,该选项对导出和导入这样的数据非常有用。 例如,若要将从 SQL Server 2000 (8.x) 服务器中的文本列获取的数据导入到 SQL Server 2005 (9.x) 或更高版本服务器中的 varchar(max) 列,则应该指定为 80 。 同样,如果从 varchar(max) 列导出数据时指定为 80,数据的保存方式就与按照 SQL Server 2000 (8.x) 格式保存的文本列类似,并且可以将这些数据导入到 SQL Server 2000 (8.x) 服务器的文本列中 。
BCP_OPTION_FIRST 要复制的文件或表的第一行数据。 默认值为 1;值小于 1 则将此选项重置为其默认值。
BCP_OPTION_FIRSTEX 对于 BCP out 操作,指定要复制到数据文件的数据库表的第一行。

对于 BCP in 操作,指定要复制到数据库表的数据文件的第一行。

iValue 参数应为包含值的带符号的 64 位整数的地址 。 可以传递到 BCPFIRSTEX 的最大值为 2^63-1。
BCP_OPTION_FMTXML 用于指定生成的格式化文件应采用 XML 格式。 此选项默认禁用,格式化文件保存为文本文件。 XML 格式化文件提供更大的灵活性,但具有某些额外约束。 例如,不能同时为字段指定前缀和终止符,而在较早的格式化文件中则可以执行此操作。

注意:在 OLE DB Driver 18.6.0 之前的版本中,XML 格式文件仅在同时安装了 SQL Server 工具和 OLE DB Driver for SQL Server 时才受支持。
BCP_OPTION_HINTS iValue 参数包含宽字符串指针 。 寻址的字符串指定 SQL Server 大容量复制处理提示或返回结果集的 Transact-SQL 语句。 如果指定的 Transact-SQL 语句返回多个结果集,则忽略第一个结果集之后的所有结果集。
BCP_OPTION_KEEPIDENTITY 将 iValue 参数设置为 TRUE 时,此选项指定大容量复制方法插入为 SQL Server 列(使用标识约束定义)提供的数据值 。 输入文件必须提供标识列的值。 如果未进行设置,则为插入的行生成新标识值。 忽略文件的标识列中所存在的任何数据。
BCP_OPTION_KEEPNULLS 指定是否会将文件中的空数据值转换为 SQL Server 表中的 NULL 值。 将 iValue 参数设置为 TRUE 时,会将空值转换为 SQL Server 表中的 NULL 。 默认情况下会将空值转换为 SQL Server 表中的列的默认值(如果存在默认值)。
BCP_OPTION_LAST 要复制的最后一行。 默认值为复制所有行。 值小于 1 则将此选项重置为其默认值。
BCP_OPTION_LASTEX 对于 BCP out 操作,指定要复制到数据文件的数据库表的最后一行。

对于 BCP in 操作,指定要复制到数据库表的数据文件的最后一行。

iValue 参数应为包含值的带符号的 64 位整数的地址 。 可以传递到 BCPLASTEX 的最大值为 2^63-1。
BCP_OPTION_MAXERRS 在大容量复制操作失败之前允许的错误数。 默认值为 10。 值小于 1 则将此选项重置为其默认值。 大容量复制将最大错误数限制为 65,535 个。 如果尝试将该选项设置为大于 65,535 的值,将导致该选项设置为 65,535。
BCP_OPTION_ROWCOUNT 返回当前(或上一次)BCP 操作所影响的行数。
BCP_OPTION_TEXTFILE 数据文件不是二进制文件而是文本文件。 BCP 将通过检查数据文件的前两个字节中的 Unicode 字节标记来确定该文本文件是否是 Unicode。
BCP_OPTION_UNICODEFILE 如果设置为 TRUE,则此选项指定输入文件是 Unicode 文件格式。

参数

eOption[in]
设置为以上备注一节中所列的选项之一。

iValue[in]
指定的 eOption 的值 。 iValue 参数是转换为 void 指针的整数值,允许将来扩展到 64 位值 。

返回代码值

S_OK
方法成功。

E_FAIL
出现访问接口特定的错误;若要获取详细信息,请使用 ISQLServerErrorInfo 接口。

E_UNEXPECTED
意外调用了该方法。 例如,在调用此函数前,未调用 IBCPSession::BCPInit 方法。

E_OUTOFMEMORY
内存不足错误。

另请参阅

IBCPSession (OLE DB)
执行大容量复制操作