Масовое обновление параметров, привязанных к HasAn

База знаний

Модераторы: m0p3e, edward_K, Модераторы

Масовое обновление параметров, привязанных к HasAn

Сообщение Zver » Пт мар 27, 2015 11:37

Уважаемые форумчане, может и боян, но вдруг кому пригодится.

Появилась необходимость изменить аналитики у большого количества МЦ. Вся сложность заключается в том, что они реализованы через таблицу HasAn, с которой не так-то просто.

Суть в том, что в HasAn не может быть записей с одинаковым набором аналитик, поэтому основная сложность при работе с этой таблицей заключается в поиске уже существующих записей, которые можно было бы использовать.

Написал вот такой запрос на MS SQL, здесь vw_GetMC - логическая таблица, в которой с KatMC привязана таблица HasAn и к HasAn необходимые аналитики.
Код: Выделить всё

create table #XX$Locks (tablenrec binary(8))

Select   
   T$KatMC.F$BARKOD
/*
update
   T$KATMC
set
   T$KatMc.F$CHASHAN = GetNewHashAn.New_Hash*/
from
   T$katMc
   join
   (Select
      HashAn_old.F$NREC      as Old_HAsh
      , HashAn_New.F$NREC      as New_Hash
   from
      (Select
         distinct( T$HASHAN.F$NREC)
      from
         vw_GetMC
         join T$KATMC
            join T$HASHAN   on   T$KatMc.F$CHASHAN = T$HASHAN.F$NREC
         on   vw_GetMC.MC_Nrec = t$KatMc.F$NREC   
      where
         vw_GetMC.Sektor = 'Отдел закупок  металлургической продукции и металлопроката'
      )   as HashAn_Old_Dist
      join T$HASHAN   as HashAn_old   on   HashAn_Old_Dist.F$NREC = HashAn_old.F$NREC
      
      --Находим записи в HashAn с таким же набором аналитик, кроме сектора
      left join
      (         
         Select
            distinct( T$HASHAN.F$NREC)
         from
            vw_GetMC
            join T$KATMC
               join T$HASHAN   on   T$KatMc.F$CHASHAN = T$HASHAN.F$NREC
            on   vw_GetMC.MC_Nrec = t$KatMc.F$NREC
         where
            vw_GetMC.Sektor = 'Отдел закупок металлургической продукции и металлопроката'
      )   as distHashAn
         join T$HASHAN   as HashAn_New   on distHashAn.F$NREC = HashAn_New.F$NREC
      
      on   HashAn_Old.F$CANALIT#2# = HashAn_New.F$CANALIT#2#
      and   HashAn_Old.F$CANALIT#3# = HashAn_New.F$CANALIT#3#
      and   HashAn_Old.F$CANALIT#4# = HashAn_New.F$CANALIT#4#
      and   HashAn_Old.F$CANALIT#5# = HashAn_New.F$CANALIT#5#
      and   HashAn_Old.F$CANALIT#6# = HashAn_New.F$CANALIT#6#
   )   as GetNewHashAn
      on T$Katmc.F$CHASHAN = GetNewHashAn.Old_HAsh   

drop table #XX$Locks
Программист-самоучка
Zver
Местный житель
 
Сообщения: 204
Зарегистрирован: Вт ноя 13, 2012 12:47
Откуда: СПб
Reputation point: 2

Вернуться в Опыт

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1