один insert на несколько записей
один insert на несколько записей
Здравствуйте
Есть ли возможность вставки нескольких записей одним запросом insert в firebird 2.0?
Есть ли возможность вставки нескольких записей одним запросом insert в firebird 2.0?
Re: один insert на несколько записей
Да, естьky4er писал(а):Здравствуйте
Есть ли возможность вставки нескольких записей одним запросом insert в firebird 2.0?
Код: Выделить всё
insert into Table1 (id, field1, ..., fieldN)
select id, field_1, ..., field_N
from Table2
спасибо но только это не то немного.
мне не нужно выбирать данные для вставки из другой базы. данные подготовленны в программе. осталось только их добавить. вроде должен работать запрос типа
insert into TABLE (FIELD) values (VALUE1), (VALUE2), (VALUE3), ...
но вот только он не воспринимается. не может разобрать запятую после (VALUE1). Может я не правильно что то делаю
мне не нужно выбирать данные для вставки из другой базы. данные подготовленны в программе. осталось только их добавить. вроде должен работать запрос типа
insert into TABLE (FIELD) values (VALUE1), (VALUE2), (VALUE3), ...
но вот только он не воспринимается. не может разобрать запятую после (VALUE1). Может я не правильно что то делаю
угу, непрально, не выйдет фокусky4er писал(а):спасибо но только это не то немного.
мне не нужно выбирать данные для вставки из другой базы. данные подготовленны в программе. осталось только их добавить. вроде должен работать запрос типа
insert into TABLE (FIELD) values (VALUE1), (VALUE2), (VALUE3), ...
но вот только он не воспринимается. не может разобрать запятую после (VALUE1). Может я не правильно что то делаю
скажи мне, кстати, где выйдет, я посмотрю на это чудо
Два варианта.
Оба для сервера являются "одним запросом".
А вообще, при переливании из базы в базу, если не суперкритична скорость заливки,и вперёд по одной записи, подставляя только значения параметров.
Код: Выделить всё
insert into Table (id, val)
select * from
(
select 1 as id, 1 as val from rdb$database
union all
select 2, 2 from rdb$database
union all
select 3, 3 from rdb$database
)
Код: Выделить всё
execute block as begin
insert into Table (id, val) values (1, 1);
insert into Table (id, val) values (2, 2);
insert into Table (id, val) values (3, 3);
end
А вообще, при переливании из базы в базу, если не суперкритична скорость заливки,
Код: Выделить всё
insert into Table (id, val) values (:param1, :param2);
пусть коллега скажет тогда в каком именно стандарте SQL, ибо все меняется, посмотрю, мож пригодится где, хотя, врядли, циклы еще никто не отменялky4er писал(а):рялом со мной седит мой коллега и говорит что это типо стандарт sql и в mysql и postgres все катит
ЗЫ Насчет MySQL не знаю, но MS SQL 2000 не кушает подобное
и в BOL не нашел ничегоINSERT INTO T501PTR (Code_Client)
VALUES('0','20')
Server: Msg 110, Level 15, State 2, Line 2
There are fewer columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.
Я уже написал. Сейчас специально посмотрел - SQL92, уровень выше Entry.stix-s писал(а):пусть коллега скажет тогда в каком именно стандарте SQL
"за предложением VALUES может следовать один или несколько списков значений в скобках, и каждый такой список составляет включаемую строку."
Ты неправильно пишешь.stix-s писал(а):INSERT INTO T501PTR (Code_Client)
VALUES('0','20')
Надо так:
Код: Выделить всё
INSERT INTO T501PTR (Code_Client)
VALUES ('0'),('20')
В скобки обязательно заключаются только конструкторы из более чем одного элемента.
Что-то я не углядел буду перечитыватьWildSery писал(а):Я уже написал. Сейчас специально посмотрел - SQL92, уровень выше Entry.stix-s писал(а):пусть коллега скажет тогда в каком именно стандарте SQL
"за предложением VALUES может следовать один или несколько списков значений в скобках, и каждый такой список составляет включаемую строку."
тут смотрел
http://savage.net.au/SQL/sql-92.bnf.html
Правильно, прально, описание ошибки четкое в моем случае, иначе простоWildSery писал(а):Ты неправильно пишешь.stix-s писал(а):INSERT INTO T501PTR (Code_Client)
VALUES('0','20')
Надо так:Хотя, я тут не совсем понял, но кажись, если из одного поля, то можно без скобок вообще, т.е. VALUES '0', '20'.Код: Выделить всё
INSERT INTO T501PTR (Code_Client) VALUES ('0'),('20')
В скобки обязательно заключаются только конструкторы из более чем одного элемента.
Line 2: Incorrect syntax near ....
Путем логических измышлений можно прийти к некому выводу...
<insert statement> ::= INSERT INTO <table name> <insert columns and source>
<insert columns and source> ::= [ <left paren> <insert column list> <right paren> ] <query expression>
<query expression> ::= <non-join query expression>
<non-join query expression> ::= <non-join query term>
<non-join query term> ::= <non-join query primary>
<non-join query primary> ::= <simple table>
<simple table> ::= <table value constructor>
<table value constructor> ::= VALUES <table value constructor list>
<table value constructor list> ::= <row value constructor> [ { <comma> <row value constructor> }... ]
<row value constructor> ::= <row value constructor element> | <left paren> <row value constructor list> <right paren>
<row value constructor list> ::= <row value constructor element> [ { <comma> <row value constructor element> } ... ]
<row value constructor element> ::= <value expression>