Скрипт для простановки одинаковой ссылки у одинаковых докторов в разных таблицах, отобранных по фамилии имени отчеству
Не могу понять, как написать следующий скрипт: есть 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
Все работает, как задумано. Спасибо за наводки.