Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];




Вниз

Еще вот такой вопрос... 


tovSuhov   (2002-02-25 14:49) [0]

Записываю некоторые данные в таблицу...
Но штука в том, что там уже могут находиться точно такие-же записи. Раньше я просто удалял всё и переписывал весь комплект данных заново вместе с изменениями. Но у такого подхода множество недостатков, один из них - невозможность посадить триггер на удаление одной записи.
Применять "в лоб" оператор update тоже нехорошо, т.к. данные, которые я попытаюсь записать, в таблице еще могут не существовать. Поэтому первое, что мне пришло на ум - сперва проверять, есть ли в таблице такая запись, а потом делать либо update, либо insert. Тогда получается, что для добавления одной записи приходится выполнять два запроса. А когда этих записей несколько сотен, это становится довольно заметно...
Вот и хочу спросить у Знатоков:
можно ли сделать добавление одним запросом, что-то типа
if <запись есть> then update(...) else insert(...)
не прибегая к хранимой процедуре?



MetallAdm   (2002-02-25 15:14) [1]

ну вообшем мы смотрим сначала есть такая запись или нет !
ну незнаю каких тпов у тебя там поля ну я условно покажу

declare @x1 typexxx
declare @x2 typexxx
declare @x3 typexxx
declare @xn typexxx


select @x1=поле1,@x2=поле2,@x3=поле3,...@xn=полеН from table
а потом смотришь какие значения ты пытаешся пихать
where поле1="повая запись" and поле2="повая запись"

if @x1 is null
begin
select "облом такая запись есть :)"
end

Ну думаю сдеся наверное процедурку придеися сделать с
параметрами

которая и смотрит что ты хочеш пропихнуть !!



Vadim   (2002-02-26 14:04) [2]

Где - то я читал про такой приём:
1) пишешь все новые данные в специально созданную (временную?) таблицу;
2) выполняешь insert into table1 select * from temptable where ..., где в условии пишешь, чё те надо или не надо.
3) delete from temptable.



Alexander Vasjuk   (2002-02-26 14:40) [3]

INSERT INTO tbl
SELECT @val1, @val2, @val3... FROM left_tbl
WHERE tbl1.fld1 <> @val1

где left_tbl - какая-нибудь таблица с одной записью




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.016 c
7-80700           Vbazik                2001-12-23 17:37  2002.03.25  
Графика под Dualhead card


1-80486           d_oleg                2002-03-12 15:54  2002.03.25  
Color memo


14-80683          McSimm                2002-02-11 12:01  2002.03.25  
Задачка с подвохом


1-80577           A.H.                  2002-03-10 00:20  2002.03.25  
Градусы


1-80556           lipskiy               2002-03-08 23:47  2002.03.25  
Ошибка clCream is not a valid integer value в Object Inspector - как бороться?