![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
insert для нескольких записей
Cross © (2010-06-29 14:04:00)SELECT'ом формирую датасет, записи которого в последующем мне нужно добавить в таблицу. можно ли сделать добавление всех записей в рамках одного запроса. Сейча для каждой записи в датасете делаю INSERT (их может быть несколько тысяч)
СУБД Firebird
Anatoly Podgoretsky (2010-07-01 09:20:00) [1]
> ЗЫ: Автор окопался как партизан и молчит. Что за манера,
> блин?! 8-(
Ну и плюнь в него.
Ega23 (2010-07-01 06:26:00) [2]
> Sergey13 © (30.06.10 09:45) [12]
>
> > [10] Ega23 © (30.06.10 07:57)
>
> Мне кажется ты вопрос невнимательно прочитал. Человек выбрал
> данные в датасет и теперь, как я понял, мечтает о том что
> бы сделать нечто вроде
Перечитал внимательнее. Вопрос можно двояко истолковать, да.
Sergey13 (2010-06-30 14:02:00) [3]> [13] Anatoly Podgoretsky © (30.06.10 13:42)
> Это не требует никаких циклов.
Минуя датасет на клиенте конечно не надо - один запрос и все. А если всетаки через датасет, как у автора, то как без цикла? Может он там в датасете правит что-то перед вставкой или ему не весь его вставить надо, а только некоторые.
ЗЫ: Автор окопался как партизан и молчит. Что за манера, блин?! 8-(
Anatoly Podgoretsky (2010-06-30 13:42:00) [4]> Sergey13 (30.06.2010 09:45:12) [12]
Это не требует никаких циклов.
Sergey13 (2010-06-30 09:45:00) [5]> [10] Ega23 © (30.06.10 07:57)
Мне кажется ты вопрос невнимательно прочитал. Человек выбрал данные в датасет и теперь, как я понял, мечтает о том что бы сделать нечто вроде
insert into My_Table select name from My_DataSet
вместо вставки в цикле по одной записи из этого датасета.
Конструкция
insert into My_Table select name from My_Table2
в ФБ проходит нормально (надо только синтаксис уточнить, он вроде как отличается немного для SQL и PLSQL), но тогда этот промежуточный датасет идет лесом или паралельно.
Leonid Troyanovsky (2010-06-30 08:40:00) [6]
> Anatoly Podgoretsky © (29.06.10 15:52) [4]
> В Firebird? Думаю вряд ли
Создать вьюшку и из оной вставить.
Если, конечно, позволяет.
--
Regards, LVT.
Ega23 (2010-06-30 07:57:00) [7]
> Sergey13 © (29.06.10 17:24) [6]
>
> Ну и который из этих восьми запросов тот единственный через
> который автору хочется сделать все?
Ты прикалываешься, или код невнимательно посмотрел?
Anatoly Podgoretsky (2010-06-30 07:46:00) [8]> Вариант (30.06.2010 07:29:08) [8]
Не знаю, у меня опыть очень старый.
Вариант (2010-06-30 07:29:00) [9]
> Anatoly Podgoretsky © (29.06.10 18:37) [7]
Таки думется мне что работать она должна ( http://www.firebirdfaq.org/faq336/). Хотя и допускаю, что реальность может оказаться другой в отличие от прочитанного мною, ибо "ОПЫТ СЫН ОШИБОК ТРУДНЫХ" (С) А.С. Пушкин, а вот именно опыта работы с FB у меня и нет.
Anatoly Podgoretsky (2010-06-29 18:37:00) [10]> Ega23 (29.06.2010 16:32:05) [5]
Не все СУБД позволяют это
Sergey13 (2010-06-29 17:24:00) [11]> [5] Ega23 © (29.06.10 16:32)
Ну и который из этих восьми запросов тот единственный через который автору хочется сделать все?
Ega23 (2010-06-29 16:32:00) [12]
> Нет. Так как хочется не получится.
чё это не получиться то?
create table x1 (name varchar(1));
insert into x1 (name) values ('1');
insert into x1 (name) values ('2');
insert into x1 (name) values ('3');
insert into x1 (name) values ('4');
create table x2 (name varchar(1));
insert into x2 (name) select name from x1;
select * from x2;
Anatoly Podgoretsky (2010-06-29 15:52:00) [13]> Cross (29.06.2010 14:04:00) [0]
В Firebird? Думаю вряд ли
aka (2010-06-29 14:41:00) [14]
> Cross (29.06.10 14:04)
В одном запросе можно сделать, главное чтобы поля совпадали.
INSERT ................ SELECT..................
Вариант (2010-06-29 14:41:00) [15]
> Cross (29.06.10 14:04)
Честно говоря не знаю, как в FB, но в LangRef для IB(возможно для Fb так же) есть такое
INSERT [TRANSACTION transaction] INTO <object> [(col [, col …])]
{VALUES (<val> [, <val> …]) | <select_expr>};
где
> select_expr A SELECT that returns zero or more rows and
> where the number of columns
> in each row is the same as the number of items to be inserted
И там же пример
> INSERT INTO PROJECTS
> SELECT * FROM NEW_PROJECTS
> WHERE NEW_PROJECTS.START_DATE > ’6-JUN-1994’;
>
Не попробуешь -не узнаешь:-)
Sergey13 (2010-06-29 14:08:00) [16]Нет. Так как хочется не получится.
Почему нельзя select сразу записать в таблицу? Слабо верится, что оператор как то обработает "несколько тысяч" за раз. Можно например записывать с признаком "свежевставленности", который потом, после проверки, снимать.