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

Вниз

UPDATE с углубленным сравнением   Найти похожие ветки 

 
Ольга   (2005-02-18 09:30) [0]

Пишу хранимую процедуру.
Есть 2 таблицы Т1 и Т2 с одинаковыми структурами.
Нужно обновить данные в Т1 для всех соответствующих записей из Т2, где были сделаны изменения хотя бы в одном поле.

Пишу в лоб:
UPDATE T1 SET pole1=b.pole1,...,poleN=b.poleN
FROM T1 a, T2 b
WHERE a.id=b.id AND (a.pole1<>b.pole1 OR ... OR a.poleN<>b.poleN)

Как-то коряво, длинно (около 40 полей), с души воротит.
Может есть какие-нибудь более эффектные средства для определения идентичности двух записей? Или какая другая альтернатива для решения задачи?


 
ЮЮ ©   (2005-02-18 09:39) [1]

Не использовать значения полей T1, а только T2 - тогда и обнавлять не надо! Зачем дублировать данные???


 
Johnmen ©   (2005-02-18 09:41) [2]

>Может есть какие-нибудь более эффектные средства для
>определения идентичности двух записей?

Девушкам, как всегда, нужны эффектные средства, а мужикам эффективные :)))
Но в данном случае ничего, кроме прямого явного сравнения полей не существует. А если бы и существовало, то как ты себе это представляешь ?


 
Danilka ©   (2005-02-18 09:47) [3]

[2] Johnmen ©   (18.02.05 09:41)
В орокле минус есть :)
Там, думаю, для красоты, так прокатит:
update ... where exists (select * from... minus select * from...)


 
Danilka ©   (2005-02-18 09:50) [4]

или еще проще
update ..
where id in (select * from... minus select * from...)
но это для орокла, кроме того, в свете соседней ветке про выгрузку, кажись, никчему это :)


 
Johnmen ©   (2005-02-18 10:05) [5]

>Danilka ©   (18.02.05 09:47) [3]
>В орокле минус есть :)

Спасибо. Я в курсе :^)))


 
Danilka ©   (2005-02-18 10:16) [6]

[5] Johnmen ©   (18.02.05 10:05)
Да я, вобщем-то, догадывался, что в курсе, просто написал, увидев: "А если бы и существовало, то как ты себе это представляешь ?", надо было сразу написать, к чему я про Орокол вспомнил. :)


 
Ольга   (2005-02-18 10:16) [7]

[1]
Данные дублировать нужно, т.к. Т1 и Т2 находятся в разных базах.
Т1 - большая, архивная, Т2 - маленькая, оперативная.
[2]
Наезд на "эффектные" принимается, имела в виду эффективные, конечно. Бабы, они и в Африке - бабы.

> А если бы и существовало, то как ты себе это представляешь
> ?

Не знаю, что-нибудь типа контрольной суммы...
[4]
Жаль, что у меня не Oracle. А что "minus" в PLSQL сравнивает записи по всем полям, а не только по ключевым? Тогда может в Transact-SQL есть аналог?


 
Danilka ©   (2005-02-18 10:22) [8]

[7] Ольга   (18.02.05 10:16)
>  А что "minus" в PLSQL сравнивает записи по всем полям,
> а не только по ключевым?

По всем перечисленным. Пишешь запрос один, минус второй, главное чтобы состав и тип полей совпадал с полями первого. Кажись, в TSql нет, да, вобщем-то, баловство все это. :)


 
Johnmen ©   (2005-02-18 10:28) [9]

>Danilka ©   (18.02.05 10:16) [6]

minus всего лишь маскировка, неявно то всё равно сравниваются...


 
Danilka ©   (2005-02-18 10:32) [10]

[9] Johnmen ©   (18.02.05 10:28)
Угу. Поэтому и написал в [3] "для красоты" :))


 
Johnmen ©   (2005-02-18 10:39) [11]

>Ольга   (18.02.05 10:16) [7]
>Не знаю, что-нибудь типа контрольной суммы...

Например, вычисляемое поле добавить. В котором считается контрольная сумма/хеш. Тогда только по нему.
Но стоит ли игра свеч ?


 
Ольга   (2005-02-18 10:54) [12]

[11]
Похоже, не стоит.
Я думала, может есть какие-нибудь хитрости, а я не в курсе.
Ладно, сдаюсь. Пусть пока поработает так. Слепой сказал - увидим!
Всем спасибо.


 
Layner ©   (2005-02-18 11:16) [13]

Ольга
Уж не в СК2000 ли вы что то пытаетесь делать?
:)


 
Layner ©   (2005-02-18 11:17) [14]

или СК2003 правильней будет :)


 
Ольга   (2005-02-18 12:01) [15]

[14]
Что есть СК2003?
В любом случае - нет.
У нас есть в опытной эксплуатации комплекс СК2003 - ОИК производства Сев.Кавказа
Уж не его ли вы имеете ввиду?


 
Layner ©   (2005-02-18 15:26) [16]

Да да, его и имею ввиду. Ну не с ним так не с ним.
А может вы в конторе Димидова работаете?


 
Ольга   (2005-02-19 12:04) [17]

Привет, коллега! Как мир тесен. Да, я работаю у Демидова. Напрямую SCADA-ми я не занимаюсь (которых расплодилось последнее время ... наша, ваша, буржуйская вот-вот появится).
Я занимаюсь рыночными закидонами, где тоже не сахар. У нас последнее время базы данных растут, как грибы. Интересно, кто-нибудь на верху представляет, как все это сопровождать? Дублирование данных страшенное. Вот, решаю проблемы поддержки целостности данных на, так сказать, межбазовом уровне.
У вас тот же бардак?


 
Ольга   (2005-02-19 12:28) [18]

Кстати, забыла выразить свое недоумение. Как из всего вышенаписанного можно было сделать вывод, что я с Урала и работаю у Демидова?
Мистика...


 
Иксик2   (2005-02-19 12:32) [19]


> Ольга   (19.02.05 12:28) [18]

E-mail у вас гворящий :)

Кстати, а SCAD это не что-то связанное с нефтью? Просто у нас тут один из отделов занимается чем-то похожим.


 
Ольга   (2005-02-19 12:49) [20]

А ларчик просто открывался. Точно. Обычно я свой адрес не пишу - спам замучил, а здесь, видимо, бес попутал.
Я работаю в энергетике - диспетчерское управление энергосистемами Урала. SCADA - некий программно-аппаратный комплекс автоматического сбора информации с удаленных энергообъектов (телеметрия и не только). А проблемы у нас (РАО ЕС и ГазПром), я думаю, похожие.


 
Иксик2   (2005-02-19 12:52) [21]

Ясно, наверное у нас тоже оно.


 
Layner ©   (2005-02-20 22:19) [22]

Ольга,
Здравствуйте! Я вам завтра с работы черкну.



Страницы: 1 вся ветка

Текущий архив: 2005.03.20;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.05 c
1-1109846733
Openfire
2005-03-03 13:45
2005.03.20
DBGrid и PageControl


3-1108670900
Kostafey
2005-02-17 23:08
2005.03.20
Access - совместимя БД


1-1109833523
Perova
2005-03-03 10:05
2005.03.20
Подскажите, пожалуйста, как


14-1109695986
Awex
2005-03-01 19:53
2005.03.20
Интерестный взгляд на эту проблему


1-1109911641
rosl
2005-03-04 07:47
2005.03.20
проверка папки