提高了从客户端应用程序大规模导入MS SQL 2008数据库的速度
Increasing mass import speed to MS SQL 2008 database from client application
我有一个Qt应用程序,它读取一个特殊的文本文件,对其进行解析,并将大约100000行插入firebird数据库中的临时表中。然后它启动一个存储过程来处理这个临时表,并对永久表应用一些更改。在firebird上,将100000行插入内存中的临时表大约需要8秒。
现在我需要使用MSSQLServer2008来实现这样的行为。如果我使用简单的串行插入,100000行大约需要76秒。不幸的是,它太慢了。我看了以下方式:
- 临时表(#和##)。以tempdb方案存储在磁盘上。因此没有速度增加
- 大容量插入。非常好的插入速度,但需要有客户端或服务器端共享文件夹
- 表变量。MSDN说:"不要使用表变量来存储大量数据(超过100行)。"
所以,请告诉我,提高客户端应用程序到MSSSQL2008的插入速度的正确方法是什么。
谢谢。
您可以通过OLE DB或ODBC接口使用大容量复制操作。
这篇MSDN文章似乎在整个过程中都握着你的手,对于ODBC:
分配一个环境句柄和一个连接句柄。
设置SQL_COPT_SS_BCP和SQL_BCP_ON以启用大容量复制操作。
连接到SQL Server。
调用bcp_init设置以下信息:
要从或向中大容量复制的表或视图的名称。
指定NULL作为数据文件的名称。
接收任何大容量复制错误消息的数据文件的名称(如果不需要消息文件,请指定NULL)。
复制的方向:从应用程序到视图的DB_IN或表或DB_OUT。
为大容量副本中的每一列调用bcp_bind,以将该列绑定到程序变量。
用数据填充程序变量,并调用bcp_sendrow发送数据行。
在发送了几行之后,调用bcp_batch来检查行已发送。最好至少调用一次bcp_batch每1000行。
发送完所有行后,调用bcp_done以完成活动
如果您需要批量复制函数的跨平台实现,请查看FreeTDS。
相关文章:
- 如何在MS Visual Studio 2019中运行QT UI
- 如何使用c++在VS 2019上运行SQL查询
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 在C++中调用 MS SQL 存储过程
- 尝试创建表会给出 SQL 逻辑错误
- 在 MySQL/Connector C++中使用 SQL 联接
- Qt PL/SQL - 赋值运算符 - 字符串缓冲区太小
- MS Visual Studio 解决方案结合了非托管C++项目和 C# 项目
- 连接到MS SQL的程序类型超出范围
- Windows 10 中的 MS Access 数据库 SQL 查询问题
- 如何从C ++控制台程序连接到MS SQL SERVER
- Poco C++与使用ODBC的MS SQL
- 由触发器调用的 MS SQL XP 更改 C++ 文件日期戳,以允许刷新表单应用程序 vb.net
- 提高了从客户端应用程序大规模导入MS SQL 2008数据库的速度
- 这是将csv文件导入MS Access的正确SQL语法吗
- 调试.dll C++时出现MS SQL Server 2008错误17058
- 带有用户名和密码的C++/.net(Framework 2.0)MS SQL数据库windows身份验证
- 如何使用WinApi从MS SQL表中检索大型二进制数据
- 尝试将JPG文件放入数据库时C++ODBC MS SQL "Function sequence error"
- 如何使用 ODBC (C++) 从 MS SQL 获取字符串中的 nvarchar