我有一个Qt应用程序,它读取一个特殊的文本文件,解析它并将大约100000行插入到firebird数据库的临时表中。然后,它启动一个存储过程来处理此临时表,并对永久表应用一些更改。在firebird上插入100000行到内存临时表大约需要8秒。
现在我需要使用MS SQL Server 2008实现此类行为。如果我使用简单的串行插入,则对于100000行,大约需要76秒。不幸的是,它太慢了。我看了以下几种方式:
那么,请告诉我,从客户端应用程序到MSSSQL2008的插入速度增加的正确方法是什么。
谢谢。
答案 0 :(得分:2)
This MSDN文章似乎抓住了整个过程,对于ODBC:
分配环境句柄和连接句柄。
设置SQL_COPT_SS_BCP和SQL_BCP_ON以启用批量复制操作。
连接到SQL Server。
调用bcp_init设置以下信息:
要从中批量复制的表或视图的名称。
为数据文件的名称指定NULL。
用于接收任何批量复制错误消息的数据文件的名称 (如果您不想要消息文件,请指定NULL)。
副本的方向:从应用程序到视图的DB_IN或 表或视图中的表或DB_OUT到应用程序。
为批量复制中的每个列调用bcp_bind以将列绑定到a 程序变量。
用数据填充程序变量,并调用bcp_sendrow发送一个 一行数据。
在发送了几行之后,调用bcp_batch来检查点 已发送的行。最好至少调用一次bcp_batch 每1000行。
- 醇>
发送完所有行后,调用bcp_done完成 操作
如果您需要批量复制功能的跨平台实施,请查看FreeTDS。