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

База знаний

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

Ответить
Zver
Местный житель
Сообщения: 204
Зарегистрирован: 13 ноя 2012, 12:47
Откуда: СПб
Контактная информация:

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

Сообщение Zver »

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

Появилась необходимость изменить аналитики у большого количества МЦ. Вся сложность заключается в том, что они реализованы через таблицу 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
Программист-самоучка
Ответить