首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从客户端应用程序提高MS SQL 2008数据库的大量导入速度

从客户端应用程序提高MS SQL 2008数据库的大量导入速度
EN

Stack Overflow用户
提问于 2012-03-21 08:32:17
回答 1查看 1.1K关注 0票数 2

我有一个Qt应用程序,它读取一个特殊的文本文件,解析它并将大约100000行插入到firebird数据库中的临时表中。然后启动一个存储过程来处理这个临时表,并将一些更改应用于永久表。在firebird上插入100000行到内存中的临时表需要大约8秒.

现在,我需要使用2008实现这样的行为。如果我使用简单的串行插入,100000行大约需要76秒。不幸的是,太慢了。我看了以下几种方法:

  1. 临时表(#和##)。存储在磁盘上的tempdb方案。所以没有提速。
  2. 批量插入。非常好的插入速度,但这是一个需要有客户端或服务器端共享文件夹.
  3. 表变量。MSDN说:“不要使用表变量来存储大量数据(超过100行)。”

所以,请告诉我,什么是提高插入速度从客户端应用程序到MSSSQL2008的正确方法。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-21 08:35:25

您可以使用通过OLE DBODBC接口提供的批量复制操作。

的MSDN文章似乎在整个过程中牵着您的手,对于ODBC:

  1. 分配环境句柄和连接句柄。
  2. 设置SQL_COPT_SS_BCP和SQL_BCP_ON以启用批量复制操作。
  3. 连接到Server。
  4. 调用bcp_init设置以下信息:
代码语言:javascript
复制
- The name of the table or view to bulk copy from or to.
- Specify NULL for the name of the data file.
- The name of an data file to receive any bulk copy error messages   (specify NULL if you do not want a message file).
- The direction of the copy: DB\_IN from the application to the view or   table or DB\_OUT to the application from the table or view.

  1. 为大容量复制中的每一列调用bcp_bind,以便将该列绑定到程序变量。
  2. 用数据填充程序变量,并调用bcp_sendrow发送一行数据。
  3. 发送了几行之后,调用bcp_batch对已经发送的行进行检查点。每1000行至少调用一次bcp_batch是很好的做法。
  4. 发送所有行后,调用bcp_done以完成操作。

如果您需要大容量复制函数的跨平台实现,请查看FreeTDS

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9801017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档