Скрипт для простановки одинаковой ссылки у одинаковых докторов в разных таблицах, отобранных по фамилии имени отчеству

Не могу понять, как написать следующий скрипт: есть 2 таблицы с докторами - Doctors1 и Doctors2. В этих таблицах есть поле ResourcesID (ссылка) и, соответственно, есть таблица Resources. Необходимо в таблицах Doctors1 и Doctors2 вставить уникальный ключ ResourceID для каждого доктора, при этом записи докторов в таблицах не уникальны и могут повторяться, т.е. Иванов Иван Иванович может быть несколько раз в Doctors1 и в Doctors2, но это один и тот же человек, поэтому ссылка ResourceID у него будет одна. Входные данные для запросы - Name, FName, SName (фамилия, имя, отчество доктора). Необходимо создать запись в таблице Resource (поле nullable) и проставить ID созданной записи у одинаковых докторов в обоих таблицах.


Ответы (1 шт):

Автор решения: Дмитрий

Вышло это:

select SName, Name, FName, row_number() over(order by ddd.SName, ddd.FName, ddd.Name) as id
into #res
from 
(select doctor.SName, doctor.Name, doctor.FName from dbo.Doctors1 doctor where doctor.IsDeleted = 0
  union all    
 select doctor.SName, doctor.Name, doctor.FName from dbo.Doctors2 doctor where doctor.IsDeleted = 0)
 as ddd
 group by SName, Name, FName
 order by 1
 
declare @Name NVARCHAR(100)
declare @FName NVARCHAR(100)
declare @SName NVARCHAR(100)
declare @ID INT
declare dbcurs cursor for
select * from #res
open dbcurs
fetch next from dbcurs into @SName, @Name, @FName, @ID
WHILE @@FETCH_STATUS = 0
begin 
update dbo.Doctors1 set ResourceID = @ID where Name = @Name and SName = @SName and FName = @FName
update dbo.Doctors2 set ResourceID = @ID where Name = @Name and SName = @SName and FName = @FName
insert into dbo.Resources values (@ID, null)
fetch next from dbcurs into @SName, @Name, @FName, @ID
end
close dbcurs
DEALLOCATE dbcurs

drop table #res

Все работает, как задумано. Спасибо за наводки.

→ Ссылка