Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

UPDATE с углубленным сравнением [MSSQL]


Страницы:   1 2

Ольга ©   (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...)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо