Главная страница
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.014 c
15-1249450605
Kerk
2009-08-05 09:36
2009.10.04
В России начали подделывать китайские авто


2-1249339340
bag
2009-08-04 02:42
2009.10.04
Помогите с if... then


3-1227770092
greg123
2008-11-27 10:14
2009.10.04
Как задать колонку, по кот. нужно сортировать результат в EhGrid


2-1248942126
KK
2009-07-30 12:22
2009.10.04
Строку в список


1-1218649384
Tack
2008-08-13 21:43
2009.10.04
Можно ли переименовать класс окна?