Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.26;
Скачать: CL | DM;

Вниз

insert для нескольких записей   Найти похожие ветки 

 
Cross   (2010-06-29 14:04) [0]

SELECT"ом формирую датасет, записи которого в последующем мне нужно добавить в таблицу. можно ли сделать добавление всех записей в рамках одного запроса. Сейча для каждой записи в датасете делаю INSERT (их может быть несколько тысяч)

СУБД Firebird


 
Sergey13 ©   (2010-06-29 14:08) [1]

Нет. Так как хочется не получится.
Почему нельзя select сразу записать в таблицу? Слабо верится, что оператор как то обработает "несколько тысяч" за раз. Можно например записывать с признаком "свежевставленности", который потом, после проверки, снимать.


 
aka   (2010-06-29 14:41) [2]


> Cross   (29.06.10 14:04)  

В одном запросе можно сделать, главное чтобы поля совпадали.

INSERT ................ SELECT..................


 
Вариант   (2010-06-29 14:41) [3]


> 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’;
>


Не попробуешь -не узнаешь:-)


 
Anatoly Podgoretsky ©   (2010-06-29 15:52) [4]

> Cross  (29.06.2010 14:04:00)  [0]

В Firebird? Думаю вряд ли


 
Ega23 ©   (2010-06-29 16:32) [5]


> Нет. Так как хочется не получится.


чё это не получиться то?

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;


 
Sergey13 ©   (2010-06-29 17:24) [6]

> [5] Ega23 ©   (29.06.10 16:32)

Ну и который из этих восьми запросов тот единственный через который автору хочется сделать все?


 
Anatoly Podgoretsky ©   (2010-06-29 18:37) [7]

> Ega23  (29.06.2010 16:32:05)  [5]

Не все СУБД позволяют это


 
Вариант   (2010-06-30 07:29) [8]


> Anatoly Podgoretsky ©   (29.06.10 18:37) [7]

Таки думется мне что работать она должна (http://www.firebirdfaq.org/faq336/). Хотя и допускаю, что реальность может оказаться другой в отличие от прочитанного мною, ибо "ОПЫТ СЫН ОШИБОК ТРУДНЫХ" (С) А.С. Пушкин, а вот именно опыта работы с FB у меня и нет.


 
Anatoly Podgoretsky ©   (2010-06-30 07:46) [9]

> Вариант  (30.06.2010 07:29:08)  [8]

Не знаю, у меня опыть очень старый.


 
Ega23 ©   (2010-06-30 07:57) [10]


> Sergey13 ©   (29.06.10 17:24) [6]
>
> Ну и который из этих восьми запросов тот единственный через
> который автору хочется сделать все?


Ты прикалываешься, или код невнимательно посмотрел?


 
Leonid Troyanovsky ©   (2010-06-30 08:40) [11]


> Anatoly Podgoretsky ©   (29.06.10 15:52) [4]

> В Firebird? Думаю вряд ли

Создать вьюшку и из оной вставить.
Если, конечно, позволяет.

--
Regards, LVT.


 
Sergey13 ©   (2010-06-30 09:45) [12]

> [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), но тогда этот промежуточный датасет идет лесом или паралельно.


 
Anatoly Podgoretsky ©   (2010-06-30 13:42) [13]

> Sergey13  (30.06.2010 09:45:12)  [12]

Это не требует никаких циклов.


 
Sergey13 ©   (2010-06-30 14:02) [14]

> [13] Anatoly Podgoretsky ©   (30.06.10 13:42)

> Это не требует никаких циклов.

Минуя датасет на клиенте конечно не надо - один запрос и все. А если всетаки через датасет, как у автора, то как без цикла? Может он там в датасете правит что-то перед вставкой или ему не весь его вставить надо, а только некоторые.

ЗЫ: Автор окопался как партизан и молчит. Что за манера, блин?! 8-(


 
Ega23 ©   (2010-07-01 06:26) [15]


> Sergey13 ©   (30.06.10 09:45) [12]
>
> > [10] Ega23 ©   (30.06.10 07:57)
>
> Мне кажется ты вопрос невнимательно прочитал. Человек выбрал
> данные в датасет и теперь, как я понял, мечтает о том что
> бы сделать нечто вроде


Перечитал внимательнее. Вопрос можно двояко истолковать, да.


 
Anatoly Podgoretsky ©   (2010-07-01 09:20) [16]


> ЗЫ: Автор окопался как партизан и молчит. Что за манера,
>  блин?! 8-(

Ну и плюнь в него.



Страницы: 1 вся ветка

Текущий архив: 2010.09.26;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.01 c
15-1278069139
Вася Пчелкин
2010-07-02 15:12
2010.09.26
birt/eclipse


15-1277813120
oldman
2010-06-29 16:05
2010.09.26
Самокат (перлы)


15-1277756991
Юрий
2010-06-29 00:29
2010.09.26
С днем рождения ! 29 июня 2010 вторник


2-1278147722
SIV5000
2010-07-03 13:02
2010.09.26
PNG + Componenet;


15-1277883172
SKIPtr
2010-06-30 11:32
2010.09.26
подключение 2 сети в Windows 7