2012-10-20 65 views
4

我有要求inserting enormous data in table of firebird database around 40K entries。我準備好了我的腳本,但是在使用flameRobin執行它的過程中,UI在永遠插入如此龐大的數據時永遠都會掛起。使用isql對Firebird數據庫運行多個插入查詢

我知道這將是罰款,如果我執行我的插入查詢塊255查詢,但我想知道是否有任何bulk insert tool available for Firebird做這樣的條目,而從我的scripts.sql文件讀取。

一些google搜索後,我碰到isql的工具,但不能反對執行腳本。有人可以指導我使用任何其他工具或正確的文檔來一次性輸入如此龐大的數據嗎?

我已經安裝在系統上firebird version 2.5

+0

關於使用'isql' - 爲什麼你「無法對它執行腳本」?竇你得到一個錯誤?如果是這樣,那麼錯誤信息是什麼? FB附帶的'isql'是FB的官方「命令行界面」,通常它工作正常。順便說一句,在每個1000條語句之後添加'COMMIT WORK;'語句到你的腳本中,看看它是否有所作爲。 – ain

+0

我剛剛用3-4'insert'查詢,它工作正常。但使用'40K'插入查詢似乎會掛起。我按照這個問題的方法在這裏 - http://stackoverflow.com/questions/5821562/executing-a-script-using-isql。適用於2-3個查詢,但不適用於如此龐大的數據。 :( –

+0

添加'COMMIT WORK;'聲明每1000'insert'陳述或等以後看這有區別 – ain

回答

4

40K對我來說似乎不是一個大數字。在我們的案例中,我們處理了數百萬條記錄,沒有出現重大問題我認爲hunging的原因是Flamerobin試圖解析整個腳本或類似的東西。改爲使用isql實用程序。首先,準備用命令的文本文件:

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

然後在DOS提示符下運行的實用程序:

isql < your_script.sql 

還要考慮停用指數和刪除外鍵的表批量插入操作之後恢復它們。

+0

我試過這個小數據,但每次我在提示符運行這個消息 - '使用CONNECT或CREATE DATABASE指定一個數據庫'。但是當我檢查我的數據庫時,請輸入您的電子郵箱地址 –

+0

編號對我來說很好,我可以給你發一個小型數據庫和一個腳本 –

+0

我剛剛測試過我的腳本,在10-12分鐘後,出現,但是當我檢查數據庫時,那裏的條目。所以,只要我得到輸出信息並不重要,非常感謝。 –

6

您可以使用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失敗,那麼很難調試這些東西。

0

您可以使用EXTERNAL

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