Вставка несколько INSERT в одном запросе

mmms_
Дата: 18.09.2005 20:56:55
Здравствуйте! Необходимо вставить много тысч записей в таблицу. По одно это делается, но ужасно долго, могу сделать пакет по 10 (50..100..) инсертов, и зпустить это как 1 запрос, так ругается Access, что за пределами запроса обнаруженны символы, хотя это идет 2й insert. Разделял точкой запятой, писал GO после каждого инсерта, что то никак дойти не могу, возможно ли пакетом вставить записи в БД, если возможно, то как разделять команды в нутри SQL пакета?

INSERT INTO ip (i1_1, i1_2, i1_3, ip1_4, i2_1, i2_2, i2_3, i2_4, t1, t2, suff, country) VALUES (3,0,0,0,4,17,135,31,'50331648','68257567','US','Un');
INSERT INTO ip (i1_1, i1_2, i1_3, ip1_4, i2_1, i2_2, i2_3, i2_4, t1, t2, suff, country) VALUES (4,17,135,32,4,17,135,63,'68257568','68257599','CA','Ca');
...
3й, 4й и т.д. запросы
вадя
Дата: 18.09.2005 21:06:11
1) откуда данные? (файл?)
2)"По одно это делается"???
каким образом? вручную набивается?

в зависимости от куда данные - варианты возможны разные,
mmms_
Дата: 18.09.2005 21:36:03
Нет, не файл, я вставляю эти инсерты в Access, если там прокатит, дальше сам запросом разберусь.
mmms_
Дата: 18.09.2005 21:37:26
2)"По одно это делается"???
По одному инсерту... а хотелось бы пачкой инсертов в одном запросе. По моему всю по пальцам разложил :)
funddd
Дата: 18.09.2005 22:15:11
это можно сделать пачкой инсертов в одном модуле/функции через цикл

для ускорения при обсуждении подобной проблемы кто-то предложил использовать транзакции, делая commit при, скажем, десятитысячном инсерте.
вадя
Дата: 18.09.2005 22:16:57
я не проинсерты спрашивал, а про сами данные
3,0,0,0,4,17,135,31,'50331648','68257567','US','Un'
откуда они?
из екселя, тхт, или много тысяч ты вручную набиваешь?

зачем инсерты вставлять в акс?

или у тебя эти инсерты кемто формируются ? тогда где ? и откуда ты их вытаскиваешь?


ЗЫ
твой первоначальный подход просто неправильный,
поэтоиу задачу нада знать с предыдушего шага.
АлексейК
Дата: 18.09.2005 22:46:49
точка с запятой должна быть последним символом запроса
пачку команд в одном сохраненном запросе сделать нельзя
можно объединять при помощи union но не беспредельно

INSERT INTO t2 ( q )
SELECT q
FROM (
   SELECT top 1  1 as q from msysaccessobjects
   union
   SELECT top 1 2 as q from msysaccessobjects
   union
   SELECT top 1 3 as q from msysaccessobjects) AS ss;
Владимир Саныч
Дата: 18.09.2005 22:58:28
mmms_
Дата: 19.09.2005 09:08:18
АлексейК
Вот это выход, спасибо! Всех благодарю.
Night_Stalker
Дата: 11.09.2006 17:42:12
Рискну поднять тему заново, чтобы не начинать новой...

Надо сделать вставку в таблицу аццесс новых строк, причём желательно это делать не по одной, а какими-нибудь группами ( для ускорения обработки ).

Единственный способ, который я нашёл на форумах это написать запрос в форме

INSERT INTO Table ( Column1 )
SELECT T.Column1 FROM (
SELECT TOP 1 'fgsdfg' AS Column1 FROM Table
UNION ALL
SELECT TOP 1 'sdfgsdg' AS Column1 FROM Table
UNION ALL
...
SELECT TOP 1 'sdfsdfs' AS Column1 FROM Table
) AS T

такой запрос работает, но смущает то что для создания каждой строки для вставки мы используем запрос к реальной таблице ( ТОР 1 - без этого нельзя иначе нарываемся на ошибку: "В качестве входных данных запрос должен иметь хотя бы одну таблицу или запрос" ), а объединить несколько вставок информации в один запрос хочеться именно в плане производительности...