![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
insert или update
xyz © (2009-07-30 22:06:00)Надо занести данные (множество записей, я их в цикле заношу) в непустую таблицу. У некоторых вносимых записей значение кл. поля может повторяться с уже имеющимся в базе. В этом случае надо просто обновить запись. Как сделать? Предварительно проверять select'ом есть ли уже там такое значение ключа?
Anatoly Podgoretsky (2009-07-31 11:20:00) [1]> xyz (31.07.2009 09:52:12) [12]
А синтаксис откуда взял?
xyz (2009-07-31 10:23:00) [2]Все, сделал с помощью исключений. А merge так и не работает, хотя я там исправил UPDATE SET.
xyz (2009-07-31 10:03:00) [3]
> Это при условии, что вносимые записи полностью заполняют
> записи целевой таблицы, а не часть полей. Если так, то конечно.
>
нет, не полностью. так что пара delete-insert не подходит
xyz (2009-07-31 09:52:00) [4]Вот такой код:
for i:=listbox1.Items.Count-1 downto 0 do begin
s:='MERGE INTO [Параметры вагона] USING [Параметры вагона] ON ([№ вагона]='+
listbox1.Items.Strings[i]+
') WHEN MATCHED THEN UPDATE SET [№ вагона] ='+
listbox1.Items.Strings[i]+
', [номер состава] ='+
quotedstr(edit1.text)+
'WHEN NOT MATCHED THEN INSERT ([№ вагона] , [номер состава]) VALUES ('+
listbox1.Items.Strings[i]+', '+quotedstr(edit1.text)+')';
form9.ADOCommand1.CommandText:=s;
form9.ADOCommand1.Execute;
end;
Выдает "ошибочная конструкция SQL, ожидалось 'DELETE', 'INSERT', ...
А что, можно и не в цикле заносить?
Sergey13 (2009-07-31 09:50:00) [5]> [9] Anatoly Podgoretsky © (31.07.09 09:43)
Это при условии, что вносимые записи полностью заполняют записи целевой таблицы, а не часть полей. Если так, то конечно.
Anatoly Podgoretsky (2009-07-31 09:45:00) [6]
> Откуда ты их заносишь?
Неважно, все равно он их в цикле заносит.
Anatoly Podgoretsky (2009-07-31 09:43:00) [7]> Sergey13 (31.07.2009 09:32:08) [8]
Иногда выгоднее пара Delete затем Insert (update по сути так и делает)
Sergey13 (2009-07-31 09:32:00) [8]> [0] xyz (30.07.09 22:06)
> Надо занести данные (множество записей
Откуда ты их заносишь? Возможно будет правильнее занести их все без разбора в отдельную таблицу, а потом двумя отдельными запросами (insert и update) перенести в боевую.
xyz (2009-07-31 09:03:00) [9]
> Не озвучена база данных
mdb
sniknik (2009-07-30 23:10:00) [10]> что вопрос по базам делает в начинающих? :)
это ловушка для бана "подобнолюбопытствующих"...
p.s. контр вопрос "а почему уравнение вида 2 + 2 = ? до сих пор не разбирается на семинаре по высшей математике?"
Игорь Шевченко (2009-07-30 23:01:00) [11]
> какой способ лучше в плане быстродействия?
4-ый.
Не озвучена база данных, без этого разговоры о быстродействии - пустой треп
antonn (2009-07-30 22:57:00) [12]что вопрос по базам делает в начинающих? :)
antonn (2009-07-30 22:53:00) [13]а если replace? :)
xyz (2009-07-30 22:14:00) [14]какой способ лучше в плане быстродействия? Я имею в виду способы с 1-3 :)
Игорь Шевченко (2009-07-30 22:10:00) [15]1. предварительно проверять select'ом
2. вставлять без проверки, получив ошибку обновлять
3. использовать merge
4. пересмотреть задачу