2014-12-11 211 views
1

從犀牛,我運行下面的腳本:犀牛INSERT SQL語句

var SQLstatement = connection.createStatement(); 

query = "INSERT INTO TableName(ID, Name, Date) VALUES ('1234', 'John Smith', '2012-05-24')"; 

for (var i = 0; i <= 1500; i++) 
    { 

    SQLstatement.executeUpdate(query); 
} 

所有我試圖做的是插入1500次查詢中列出的值上方插入SQL表。

但是,由於SQL的限制,該語句僅插入1000條記錄。有沒有辦法插入所有1500條記錄?我不希望使用任何帶有批量插入選項的文本文件。

+0

將循環劃分爲兩個1: - 0至999,然後1000至1500 – HaveNoDisplayName 2014-12-11 01:50:35

+0

SQL中的限制限制了可以調用「insert」的次數? – 2014-12-11 01:54:54

回答

0

有什麼話要限制你只有1000的插入,所以這聽起來像相關的提交。請嘗試以下選項:

  1. 在末尾加上
  2. 檢查提交,如果有某種犀牛設定在1000
  3. 批次提交嘗試運行你的代碼與500次2500迭代分開說的和檢查在每種情況下插入多少條記錄
+0

這個問題是在犀牛設置,並沒有什麼是錯的代碼。 – user3566591 2014-12-11 21:42:46

0

Domt知道問題是什麼,你都面臨着使1500年記錄單去不插入,但如果事情有鴻溝的循環分爲二,1 - 0到999,然後1000到1500

(只是樣品概念,而不是實際的代碼)

BEGIn TRAN 
     for (var i = 0; i <= 999; i++) 
     { 
      SQLstatement.executeUpdate(query); 
     } 

COMMIT 
BEGIn TRAN 
     for (var i = 1000; i <= 1500; i++) 
     { 
      SQLstatement.executeUpdate(query); 
     } 
COMMIT 
+1

這與原始代碼有何不同? – benji 2014-12-11 01:58:54

+0

@benji: - 這是打破循環,使單循環不超過1000條記錄,然後提交 – HaveNoDisplayName 2014-12-11 02:12:05

1

怎麼樣不同的方法 - 只需運行sql聲明一次。這將創建一個cartesian product,它在單個語句中創建1500條記錄。

INSERT INTO TableName(ID, Name, Date) 
SELECT '1234', 'John Smith', '2012-05-24' 
FROM (SELECT 1 rn UNION SELECT 2) t, (SELECT 1 rn union SELECT 2) t2, 
    (SELECT 1 rn union SELECT 2) t3, (SELECT 1 rn union SELECT 2) t4, 
    (SELECT 1 rn union SELECT 2) t5, (SELECT 1 rn union SELECT 2) t6, 
    (SELECT 1 rn union SELECT 2) t7, (SELECT 1 rn union SELECT 2) t8, 
    (SELECT 1 rn union SELECT 2) t9, (SELECT 1 rn union SELECT 2) t10, 
    (SELECT 1 rn union SELECT 2) t11, (SELECT 1 rn union SELECT 2) t12 
LIMIT 1500 
+0

這是一個有趣的想法,它適用於我的例子。 – user3566591 2014-12-11 21:44:23

0

我確定發生的事情是@benji是在正確的軌道上。我的猜測是你的數據庫實現緩衝記錄沒有提交,除非緩衝區達到1000;然後它提交。當第一千次運行(或可能是第1001次)時,你的第一個1000會進入,但其餘的永遠不會執行。

所以這裏的答案是在部分實現中沒有提供。這與Rhino或SQL無關。這也意味着其他建議(比如一次只能插入1000個)也不起作用,因爲在這些情況下,驅動程序永遠不會提交第二批,並將首次巧合提交。

發佈有關數據庫驅動程序,連接等問題的更多信息,因此我們可能會爲您提供幫助。

或者對於更黑暗的版本,嘗試在程序結尾處添加connection.commit()(我對connection是什麼進行了一些假設,所以這可能不起作用)。

+0

我試過connection.commit(),但它沒有工作。原來,這是我在上面提到的Rhino中的一個設置。感謝您的建議 – user3566591 2014-12-11 21:45:32

+0

您的意思是什麼「犀牛」? Rhino JavaScript引擎?或者是其他東西? – 2014-12-12 13:00:35