bcp_control

更改文件与 SQL Server 之间的大容量复制的各种控件参数的默认设置。

语法

  
RETCODE bcp_control (  
HDBC   
hdbc  
,  
INT   
eOption  
,  
void*   
iValue  
);  
  

论据

hdbc
已启用大容量复制的 ODBC 连接句柄。

eOption
是以下项之一:

BCPABORT
停止正在进行的大容量复制作。 从另一个线程调用 具有 BCPABORT 的 eOption bcp_control以停止正在运行的大容量复制作。 忽略 iValue 参数。

BCPBATCH
每个批处理的行数。 默认值为 0,它指示在提取数据时、提取数据时或用户数据文件中的所有行(将数据复制到 SQL Server 时)。 小于 1 的值将 BCPBATCH 重置为默认值。

BCPDELAYREADFMT
如果设置为 true,布尔值将导致 执行时读取bcp_readfmt 。 如果为 false(默认值),bcp_readfmt将立即读取格式化文件。 如果 BCPDELAYREADFMT 为 true,并且调用bcp_columns或bcp_setcolfmt,则会发生序列错误。

如果在调用 BCPDELAYREADFMT 并bcp_writefmt后bcp_control(hdbc,调用 bcp_control(hdbc, BCPDELAYREADFMT, (void *)FALSE), (void *)TRUE),也会发生序列错误。

有关详细信息,请参阅 元数据发现

BCPFILECP
iValue 包含数据文件的代码页数。 可以指定代码页的数目,例如 1252 或 850,或以下值之一:

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

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

BCPFILE_RAW:文件中的数据位于 SQL Server 的代码页中。

BCPFILEFMT
数据文件格式的版本号。 这可以是 80 (SQL Server 2000)、90 (SQL Server 2005)、100 (SQL Server 2008 或 SQL Server 2008 R2)、110 (SQL Server 2012) 或 120 (SQL Server 2014)。 120 是默认值。 这对于以早期版本的服务器支持的格式导出和导入数据非常有用。 例如,若要将从 SQL Server 2000 服务器中的文本列获取的数据导入 SQL Server 2005 或更高版本服务器中的 varchar(max) 列,应指定 80。 同样,如果在从 varchar(max) 列导出数据时指定了 80,则它将像以 SQL Server 2000 格式保存文本列一样保存,并且可以导入到 SQL Server 2000 服务器的文本列中。

BCPFIRST
要复制的文件或表的第一行数据。 默认值为 1;小于 1 的值将此选项重置为其默认值。

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

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

iValue 参数应为包含值的有符号 64 位整数的地址。 可传递给 BCPFIRSTEX 的最大值为 2^63-1。

BCPFMTXML
指定生成的格式化文件应采用 XML 格式。 默认情况下,它处于关闭状态。

XML 格式化文件提供更大的灵活性,但具有一些附加的约束。 例如,不能同时为字段指定前缀和终止符,这在较旧的格式文件中是可能的。

注释

仅当 SQL Server 与 SQL Server Native Client 一起安装时,才支持 XML 格式化文件。

BCPHINTS
iValue 包含 SQLTCHAR 字符串指针。 寻址的字符串指定 SQL Server 大容量复制处理提示或返回结果集的 Transact-SQL 语句。 如果指定了返回多个结果集的 Transact-SQL 语句,则忽略第一个结果集后的所有结果集。 有关大容量复制处理提示的详细信息,请参阅 bcp 实用工具

BCPKEEPIDENTITY
iValue 为 TRUE 时,指定大容量复制函数插入为使用标识约束定义的 SQL Server 列提供的数据值。 输入文件必须提供标识列的值。 如果未设置,将为插入的行生成新的标识值。 将忽略标识列的文件中存在的任何数据。

BCPKEEPNULLS
指定文件中的空数据值是否会转换为 SQL Server 表中的 NULL 值。 当 iValue 为 TRUE 时,空值将转换为 SQL Server 表中的 NULL。 默认值用于将空值转换为 SQL Server 表中的列的默认值(如果存在默认值)。

BCPLAST
要复制的最后一行。 默认值是复制所有行;小于 1 的值将此选项重置为其默认值。

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

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

iValue 参数应为包含值的有符号 64 位整数的地址。 可以传递给 BCPLASTEX 的最大值为 2^63-1。

BCPMAXERRS
大容量复制作失败之前允许的错误数。 默认值为 10;小于 1 的值将此选项重置为其默认值。 大容量复制最多施加 65,535 个错误。 尝试将此选项设置为大于 65,535 的值会导致选项设置为 65,535。

BCPODBC
如果为 TRUE,则指定以字符格式保存的 datetimesmalldatetime 值将使用 ODBC 时间戳转义序列前缀和后缀。 BCPODBC 选项仅适用于BCP_OUT。

如果为 FALSE,表示 1997 年 1 月 1 日的 日期/时间 值将转换为字符串:1997-01-01 00:00:00.000。 如果为 TRUE,则表示相同的 日期/时间 值:{ts '1997-01-01 00:00:00.000'}。

BCPROWCOUNT
返回受当前(或最后一次)BCP作影响的行数。

BCPTEXTFILE
如果为 TRUE,则指定数据文件是文本文件,而不是二进制文件。 如果该文件是文本文件,BCP 将通过检查数据文件的前两个字节中的 Unicode 字节标记来确定它是否为 Unicode。

BCPUNICODEFILE
如果为 TRUE,则指定输入文件为 Unicode 文件。

iValue
指定的 eOption 的值。 iValue 是一个整数(LONGLONG)值,转换为 void 指针,以便将来扩展到 64 位值。

退货

SUCCEED 或 FAIL。

注解

此函数为大容量复制作设置各种控制参数,包括取消大容量复制之前允许的错误数、要从数据文件复制的第一行和最后一行数以及批大小。

此函数还用于在从 SQL Server 大容量复制 SELECT 的结果集时指定 SELECT 语句。 将 eOption 设置为 BCPHINTS,并将 iValue 设置为具有指向包含 SELECT 语句的 SQLTCHAR 字符串的指针。

只有在用户文件和 SQL Server 表之间复制时,这些控制参数才有意义。 控制参数设置对复制到 具有bcp_sendrow的 SQL Server 的行没有影响。

示例:

// Variables like henv not specified.  
SQLHDBC      hdbc;  
DBINT      nRowsProcessed;  
  
// Application initiation, get an ODBC environment handle, allocate the  
// hdbc, and so on.  
...   
  
// Enable bulk copy prior to connecting on allocated hdbc.  
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (SQLPOINTER) SQL_BCP_ON,  
   SQL_IS_INTEGER);  
  
// Connect to the data source, return on error.  
if (!SQL_SUCCEEDED(SQLConnect(hdbc, _T("myDSN"), SQL_NTS,  
   _T("myUser"), SQL_NTS, _T("myPwd"), SQL_NTS)))  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Initialize bulk copy.   
if (bcp_init(hdbc, _T("address"), _T("address.add"), _T("addr.err"),  
   DB_IN) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set the number of rows per batch.   
if (bcp_control(hdbc, BCPBATCH, (void*) 1000) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set file column count.   
if (bcp_columns(hdbc, 1) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set the file format.   
if (bcp_colfmt(hdbc, 1, 0, 0, SQL_VARLEN_DATA, '\n', 1, 1)  
   == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Execute the bulk copy.   
if (bcp_exec(hdbc, &nRowsProcessed) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
printf_s("%ld rows processed by bulk copy.", nRowsProcessed);  
  

另请参阅

大容量复制函数