Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
while exists (
select
C.CONTRAGENT_NAME,
PR.PHONE
from CONTRAGENTS C
inner join CONTRAGENT_PROPERTIES PR on PR.CONTRAGENT_ID = C.CONTRAGENT_ID
except select NAME,PHONE from IMPORT_SOURCE)
begin
declare @IDENTITIES table (CONTRAGENT_ID int)
insert CONTRAGENTS (
CONTRAGENT_NAME,
…)
output inserted.CONTRAGENT_ID into @IDENTITIES
select distinct
NAME,
…
from IMPORT_SOURCE
insert CONTRAGENT_PROPERTIES (
…,
PHONE,
…)
select
…,
S.PHONE
…
from @IDENTITIES I
inner join CONTRAGENTS C on C.CONTRAGENT_ID = I.CONTRAGENT_ID
cross apply (
select top 1
from IMPORT_SOURCE S
left join (
select
C.CONTRAGENT_NAME,
PR.PHONE
from CONTRAGENTS C
inner join CONTRAGENT_PROPERTIES PR on PR.CONTRAGENT_ID = C.CONTRAGENT_ID
) TX on TX.CONTRAGENT_NAME = S.NAME and TX.PHONE = S.PHONE
where TX.CONTRAGENT_NAME is null)
end
Импорт. В источнике за ключевые поля нужно было взять NAME и PHONE, которые в целевой базе — в разных таблицах. Курсоры — слишком долго.
Комментарии (0) RSS