2014-12-11 4 views
1

С Rhino, я бегу следующий сценарий:Rhino 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); 
} 

Все, что я пытаюсь сделать, это вставить 1,500 раз значения, указанные в запросе выше в таблицу SQL.

Однако из-за ограничений в SQL оператор вставляет только 1000 записей. Есть ли способ вставить все 1500 записей? Я бы предпочел не использовать текстовые файлы с опцией объемной вставки.

+0

разделите цикл на два, 1: - от 0 до 999, а затем с 1000 на 1500 – HaveNoDisplayName

+0

Какие ограничения в SQL ограничивают количество раз, которое вы можете назвать 'insert'? –

ответ

0

Там нет ничего, что должно ограничивать вас только 1000 вставок, поэтому оно звучит как отношение к фиксации. Попробуйте следующие варианты:

  1. Добавить коммит в конце
  2. Проверьте, есть ли какое-то настройка в Rhino, который совершает в партиях от 1000
  3. Попробуйте запустить свой код с сказать 500 и 2500 итераций по отдельности и проверьте, сколько записей вставлено в каждом случае
+0

Проблема была в Rhino, и с кодом ничего не случилось. – user3566591

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

+0

@benji: - он разбивает цикл таким образом, что не более 1000 записей в одном цикле, а затем фиксирует – HaveNoDisplayName

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

0

Я уверен, что происходит, что @benji находится на правильном пути. Я предполагаю, что ваша реализация базы данных буферизует записи без фиксации, если буфер не достигнет 1000; то он совершает. Ваша первая тысяча входит, когда 1000-й запуск (или, может быть, 1001-й), но остаток никогда не будет зафиксирован.

Таким образом, ответ здесь не входит в некоторые части реализации. Это не имеет ничего общего с Rhino или SQL. Это также означает, что другие предложения (например, просто вставлять 1000 за раз) тоже не будут работать, потому что драйвер никогда не собирается совершать вторую партию в этих случаях и будет совершать первое по совпадению.

Отправьте дополнительную информацию о драйвере базы данных, подключении и т. Д., И мы сможем вам помочь.

Или для более детальной версии, попробуйте добавить connection.commit() в конце программы (я делаю некоторые предположения о том, что такое connection, поэтому это может не сработать).

+0

Я пробовал connection.commit(), но это не сработало. Оказалось, что это была установка в Носороге, как я упоминал выше. Спасибо за совет – user3566591

+0

Что такое «Rhino»? Двигатель Rhino JavaScript? Или что-то другое? –

Смежные вопросы