Текущий архив: 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