![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
UPDATE с углубленным сравнением [MSSQL]
Ольга © (2005-02-18 09:30:00)Пишу хранимую процедуру.
Есть 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 полей), с души воротит.
Может есть какие-нибудь более эффектные средства для определения идентичности двух записей? Или какая другая альтернатива для решения задачи?
Layner (2005-02-20 22:19:00) [1]Ольга,
Здравствуйте! Я вам завтра с работы черкну.
Иксик2 (2005-02-19 12:52:00) [2]Ясно, наверное у нас тоже оно.
Ольга (2005-02-19 12:49:00) [3]А ларчик просто открывался. Точно. Обычно я свой адрес не пишу - спам замучил, а здесь, видимо, бес попутал.
Я работаю в энергетике - диспетчерское управление энергосистемами Урала. SCADA - некий программно-аппаратный комплекс автоматического сбора информации с удаленных энергообъектов (телеметрия и не только). А проблемы у нас (РАО ЕС и ГазПром), я думаю, похожие.
Иксик2 (2005-02-19 12:32:00) [4]
> Ольга (19.02.05 12:28) [18]
E-mail у вас гворящий :)
Кстати, а SCAD это не что-то связанное с нефтью? Просто у нас тут один из отделов занимается чем-то похожим.
Ольга (2005-02-19 12:28:00) [5]Кстати, забыла выразить свое недоумение. Как из всего вышенаписанного можно было сделать вывод, что я с Урала и работаю у Демидова?
Мистика...
Ольга (2005-02-19 12:04:00) [6]Привет, коллега! Как мир тесен. Да, я работаю у Демидова. Напрямую SCADA-ми я не занимаюсь (которых расплодилось последнее время ... наша, ваша, буржуйская вот-вот появится).
Я занимаюсь рыночными закидонами, где тоже не сахар. У нас последнее время базы данных растут, как грибы. Интересно, кто-нибудь на верху представляет, как все это сопровождать? Дублирование данных страшенное. Вот, решаю проблемы поддержки целостности данных на, так сказать, межбазовом уровне.
У вас тот же бардак?
Layner (2005-02-18 15:26:00) [7]Да да, его и имею ввиду. Ну не с ним так не с ним.
А может вы в конторе Димидова работаете?
Ольга (2005-02-18 12:01:00) [8][14]
Что есть СК2003?
В любом случае - нет.
У нас есть в опытной эксплуатации комплекс СК2003 - ОИК производства Сев.Кавказа
Уж не его ли вы имеете ввиду?
Layner (2005-02-18 11:17:00) [9]или СК2003 правильней будет :)
Layner (2005-02-18 11:16:00) [10]Ольга
Уж не в СК2000 ли вы что то пытаетесь делать?
:)
Ольга (2005-02-18 10:54:00) [11][11]
Похоже, не стоит.
Я думала, может есть какие-нибудь хитрости, а я не в курсе.
Ладно, сдаюсь. Пусть пока поработает так. Слепой сказал - увидим!
Всем спасибо.
Johnmen (2005-02-18 10:39:00) [12]>Ольга (18.02.05 10:16) [7]
>Не знаю, что-нибудь типа контрольной суммы...
Например, вычисляемое поле добавить. В котором считается контрольная сумма/хеш. Тогда только по нему.
Но стоит ли игра свеч ?
Danilka (2005-02-18 10:32:00) [13][9] Johnmen © (18.02.05 10:28)
Угу. Поэтому и написал в [3] "для красоты" :))
Johnmen (2005-02-18 10:28:00) [14]>Danilka © (18.02.05 10:16) [6]
minus всего лишь маскировка, неявно то всё равно сравниваются...
Danilka (2005-02-18 10:22:00) [15][7] Ольга (18.02.05 10:16)
> А что "minus" в PLSQL сравнивает записи по всем полям,
> а не только по ключевым?
По всем перечисленным. Пишешь запрос один, минус второй, главное чтобы состав и тип полей совпадал с полями первого. Кажись, в TSql нет, да, вобщем-то, баловство все это. :)
Ольга (2005-02-18 10:16:00) [16][1]
Данные дублировать нужно, т.к. Т1 и Т2 находятся в разных базах.
Т1 - большая, архивная, Т2 - маленькая, оперативная.
[2]
Наезд на "эффектные" принимается, имела в виду эффективные, конечно. Бабы, они и в Африке - бабы.
> А если бы и существовало, то как ты себе это представляешь
> ?
Не знаю, что-нибудь типа контрольной суммы...
[4]
Жаль, что у меня не Oracle. А что "minus" в PLSQL сравнивает записи по всем полям, а не только по ключевым? Тогда может в Transact-SQL есть аналог?
Danilka (2005-02-18 10:16:00) [17][5] Johnmen © (18.02.05 10:05)
Да я, вобщем-то, догадывался, что в курсе, просто написал, увидев: "А если бы и существовало, то как ты себе это представляешь ?", надо было сразу написать, к чему я про Орокол вспомнил. :)
Johnmen (2005-02-18 10:05:00) [18]>Danilka © (18.02.05 09:47) [3]
>В орокле минус есть :)
Спасибо. Я в курсе :^)))
Danilka (2005-02-18 09:50:00) [19]или еще проще
update ..
where id in (select * from... minus select * from...)
но это для орокла, кроме того, в свете соседней ветке про выгрузку, кажись, никчему это :)
Danilka (2005-02-18 09:47:00) [20][2] Johnmen © (18.02.05 09:41)
В орокле минус есть :)
Там, думаю, для красоты, так прокатит:
update ... where exists (select * from... minus select * from...)