IBCPSession::BCPExec (Native Client OLE DB Provider)

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

重要

已从 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中移除 SQL Server Native Client(通常缩写为 SNAC)。 不建议在新的开发工作中使用 SQL Server Native Client OLE DB 提供程序(SQLNCLI 或 SQLNCLI11)和旧版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB)。 此后请切换到新的 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server

执行大容量复制操作。

语法

  
HRESULT BCPExec(   
      DBROWCOUNT *pRowsCopied);  

备注

BCPExec 方法将数据从用户文件复制到数据库表或执行相反的操作,具体取决于与 IBCPSession::BCPInit 方法一起使用的 eDirection 参数的值。

在调用 BCPExec 之前,请用有效的用户文件名调用 BCPInit 方法 。 如果没有这样做,会导致错误。 唯一的例外就是如果查询要用于大容量复制操作。 这种情况下,在 BCPInit 方法中将表名指定为 NULL,然后使用 BCP_OPTION_HINTS 选项指定查询 。

BCPExec 方法是可能胜任任何时间长度的唯一大容量复制方法 。 因此,它是支持异步模式的唯一大容量复制方法。 若要使用异步模式,请在调用 BCPExec 方法之前,将特定于提供程序的会话属性 SSPROP_ASYNCH_BULKCOPY 设置为 VARIANT_TRUE 。 此属性位于 DBPROPSET_SQLSERVERSESSION 属性集中。 若要完成测试,请用相同参数调用 BCPExec 方法 。 如果大容量复制尚未完成,则 BCPExec 方法会返回 DB_S_ASYNCHRONOUS 。 它还会在 pRowsCopied 参数中返回已发送到服务器或从服务器接收的行数的状态计数 。 发送到服务器的行直到到达批的末尾时才会提交。

参数

pRowsCopied [out]
指向 DWORD 的指针。 BCPExec 方法用成功复制的行数填充 DWORD 。 如果将 pRowsCopied 参数设置为 NULL,则 BCPExec 方法会忽略该参数 。

返回代码值

S_OK
方法成功。

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

E_UNEXPECTED
意外调用了该方法。 例如,在调用该方法之前,未调用 BCPInit 方法 。 如果通过使用 BCP_OPTION_ABORT 选项中止了操作,并且随后调用了 BCPExec 方法,则也会发生此调用 。

E_OUTOFMEMORY
内存不足错误。

DB_S_ENDOFROWSET
大容量复制操作完成,所有数据传输已完成。

DB_S_ASYNCHRONOUS
当前这批行已复制。 请再次调用 BCPExec 方法以传输下一批 。

DB_S_ERRORSOCCURRED
在大容量复制操作期间出现错误,可能尚未复制某些行。 错误数仍然小于允许的最大错误数。

另请参阅

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