Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 сразу записать в таблицу? Слабо верится, что оператор как то обработает "несколько тысяч" за раз. Можно например записывать с признаком "свежевставленности", который потом, после проверки, снимать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо