使用isql对firebird数据库运行多个插入查询

时间:2012-10-20 08:40:20

标签: firebird firebird2.5 isql

我要求inserting enormous data in table of firebird database around 40K entries。我准备好了我的脚本,但是在使用flameRobin执行它时,UI一下子插入如此巨大的数据就永远挂起了。

我知道如果我以255个查询的块执行插入查询会很好,但我想知道在从scripts.sql文件读取时是否有bulk insert tool available for Firebird来执行此类条目。

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

我的系统上安装了firebird version 2.5

3 个答案:

答案 0 :(得分:7)

您可以使用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失败,那么调试内容真的很难。

答案 1 :(得分:5)

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

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

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

isql < your_script.sql

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

答案 2 :(得分:0)

您可以使用EXTERNAL

command.CommandText = @"CREATE TABLE TEMP1 EXTERNAL FILE 'c:\ExternalTables\Ext.ext'(ID INTEGER,CRLF CHAR(2));";
int j=command.ExecuteNonQuery();