Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.007 c
2-1248864742
Tneduts
2009-07-29 14:52
2009.10.04
Отображение полей с одинаковыми именами из разных таблиц


2-1248933090
Someone
2009-07-30 09:51
2009.10.04
Как изменить значение ключа в реестре (по умолчанию)?


15-1249417804
Юрий
2009-08-05 00:30
2009.10.04
С днем рождения ! 5 августа 2009 среда


2-1248952921
xyz
2009-07-30 15:22
2009.10.04
вопрос по поводу пути до БД в ADOConnection


11-1204725355
andreil
2008-03-05 16:55
2009.10.04
Организовать правильную работу с потоками...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский