Главная страница
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.015 c
8-1184783271
milkboy
2007-07-18 22:27
2009.10.04
FullScreen в проигрывателе !


15-1249158604
Юрий
2009-08-02 00:30
2009.10.04
С днем рождения ! 2 августа 2009 воскресенье


15-1249072202
Юрий
2009-08-01 00:30
2009.10.04
С днем рождения ! 1 августа 2009 суббота


15-1249145240
@!!ex
2009-08-01 20:47
2009.10.04
Как прошивать Аладиновские ключи??


1-1218185285
pogi
2008-08-08 12:48
2009.10.04
1С OLE запись - в полях значения "<>"