Форум: "Начинающим";
Текущий архив: 2009.10.04;
Скачать: [xml.tar.bz2];
Внизinsert или update Найти похожие ветки
← →
xyz (2009-07-30 22:06) [0]Надо занести данные (множество записей, я их в цикле заношу) в непустую таблицу. У некоторых вносимых записей значение кл. поля может повторяться с уже имеющимся в базе. В этом случае надо просто обновить запись. Как сделать? Предварительно проверять select"ом есть ли уже там такое значение ключа?
← →
Игорь Шевченко © (2009-07-30 22:10) [1]1. предварительно проверять select"ом
2. вставлять без проверки, получив ошибку обновлять
3. использовать merge
4. пересмотреть задачу
← →
xyz (2009-07-30 22:14) [2]какой способ лучше в плане быстродействия? Я имею в виду способы с 1-3 :)
← →
antonn © (2009-07-30 22:53) [3]а если replace? :)
← →
antonn © (2009-07-30 22:57) [4]что вопрос по базам делает в начинающих? :)
← →
Игорь Шевченко © (2009-07-30 23:01) [5]
> какой способ лучше в плане быстродействия?
4-ый.
Не озвучена база данных, без этого разговоры о быстродействии - пустой треп
← →
sniknik © (2009-07-30 23:10) [6]> что вопрос по базам делает в начинающих? :)
это ловушка для бана "подобнолюбопытствующих"...
p.s. контр вопрос "а почему уравнение вида 2 + 2 = ? до сих пор не разбирается на семинаре по высшей математике?"
← →
xyz (2009-07-31 09:03) [7]
> Не озвучена база данных
mdb
← →
Sergey13 © (2009-07-31 09:32) [8]> [0] xyz (30.07.09 22:06)
> Надо занести данные (множество записей
Откуда ты их заносишь? Возможно будет правильнее занести их все без разбора в отдельную таблицу, а потом двумя отдельными запросами (insert и update) перенести в боевую.
← →
Anatoly Podgoretsky © (2009-07-31 09:43) [9]> Sergey13 (31.07.2009 09:32:08) [8]
Иногда выгоднее пара Delete затем Insert (update по сути так и делает)
← →
Anatoly Podgoretsky © (2009-07-31 09:45) [10]
> Откуда ты их заносишь?
Неважно, все равно он их в цикле заносит.
← →
Sergey13 © (2009-07-31 09:50) [11]> [9] Anatoly Podgoretsky © (31.07.09 09:43)
Это при условии, что вносимые записи полностью заполняют записи целевой таблицы, а не часть полей. Если так, то конечно.
← →
xyz (2009-07-31 09:52) [12]Вот такой код:
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", ...
А что, можно и не в цикле заносить?
← →
xyz (2009-07-31 10:03) [13]
> Это при условии, что вносимые записи полностью заполняют
> записи целевой таблицы, а не часть полей. Если так, то конечно.
>
нет, не полностью. так что пара delete-insert не подходит
← →
xyz (2009-07-31 10:23) [14]Все, сделал с помощью исключений. А merge так и не работает, хотя я там исправил UPDATE SET.
← →
Anatoly Podgoretsky © (2009-07-31 11:20) [15]> xyz (31.07.2009 09:52:12) [12]
А синтаксис откуда взял?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.10.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c