Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.09.26;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.004 c
2-1277722570
rar
2010-06-28 14:56
2010.09.26
dbgrideh


2-1278015203
AKE
2010-07-02 00:13
2010.09.26
Как сделать так чтобы элементы StringList...


2-1278037272
novai
2010-07-02 06:21
2010.09.26
Записать содержимое GetMem в файл


11-1224133618
Danger
2008-10-16 09:06
2010.09.26
Lazarus 0.9.26 + fpc 2.2.2


15-1277827538
MBo
2010-06-29 20:05
2010.09.26
Сами мы не местные...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский