4

我有要求inserting enormous data in table of firebird database around 40K entries。我准备好了我的脚本,但是在使用 FlameRobin 执行它时,用户界面在一次性插入如此庞大的数据时永远挂起。

我知道如果我在 255 个查询块中执行我的插入查询会很好,但我想知道在bulk insert tool available for Firebird从我的 scripts.sql 文件中读取时是否有任何要做这样的条目。

经过一番谷歌搜索,我遇到了isql工具,但无法针对它执行脚本。有人可以指导我使用任何其他工具或适当的文档来一次性输入如此庞大的数据吗?

我已经firebird version 2.5安装在我的系统上。

4

3 回答 3

8

您可以使用 EXECUTE BLOCK 将更多插入内容填充到单个语句中。像这样的东西:

set term !! ;
EXECUTE BLOCK AS BEGIN
  insert into ... values ...;
  insert into ... values ...;
  insert into ... values ...;
  insert into ... values ...;
  ....etc.
  insert into ... values ...;
END!!

您可以一次将它们分组为 100 个或类似的。这应该会使事情进展得更快,也可以改进 FlameRobin 的解析。

isql 仍然更快,但这可以为您提供更好的错误控制。如果中间的某些插入因 isql 而失败,那么调试东西真的很困难。

于 2012-10-25T09:29:43.647 回答
5

40K对我来说似乎不是一个大数字。在我们的案例中,我们处理数百万条记录而不会出现重大问题。我认为挂起的原因是 Flamerobin 试图解析整个脚本或类似的东西。请改用isql实用程序。首先,准备一个带有命令的文本文件:

CONNECT "your_server:your_database_name" USER "sysdba" PASSWORD "masterkey";
INSERT ... ;
INSERT ... ;
....
INSERT ... ;
EXIT;

然后从 dos 提示符运行实用程序:

isql < your_script.sql

还可以考虑停用索引并删除表的外键以进行批量插入操作,然后再恢复它们。

于 2012-10-20T09:06:13.730 回答
0

您可以使用EXTERNAL.

command.CommandText = @"CREATE TABLE TEMP1 EXTERNAL FILE 'c:\ExternalTables\Ext.ext'(ID INTEGER,CRLF CHAR(2));";
int j=command.ExecuteNonQuery();
于 2014-02-08T19:40:39.463 回答