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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
2-1248969500
ford
2009-07-30 19:58
2009.10.04
Delimiter и QuoteChar


2-1249235282
redlord
2009-08-02 21:48
2009.10.04
почему Tacropdf открывает не все файлы


15-1249298834
13.12
2009-08-03 15:27
2009.10.04
Элита программистов


2-1245312678
Strate
2009-06-18 12:11
2009.10.04
Полупрозрачная заливка Canvas


2-1248680807
ford
2009-07-27 11:46
2009.10.04
TWordApplication выдает ошибку - "вызов был отклонен"