Идея Пола о поисковой таблице вполне разумна.Тем не менее, у него есть некоторые недостатки.Например, возможны дубликаты.Они маловероятны, если в ваших таблицах 10 или 100 строк.Они гораздо более вероятны, если у них есть 10 000 000 или 100 000 000.
Кроме того, предполагается, что все значения в таблице2 находятся в таблице1.И это имеет проблему, если table1
или table2
имеют дублирующиеся номера социального страхования.
Итак, я бы предложил просто использовать последовательные числа, рандомизировать порядок, объединить данные из обеих таблиц и удалить дубликаты:
select SocSecNum,
right('000000000' + cast(row_number() over (order by newid()) as varchar(255)), 9) as new_SocSecNum
into #SsnMap
from (select SocSecNum
from Table1
union -- on purpose to remove duplicates
select SocSecNum
from Table2
) s;
update t1
set SocSecNum = new_SocSecNum
from Table1 t1 join
#SsnMap s
on t1.SocSecNum = s.SocSecNum;
update t2
set SocSecNum = new_SocSecNum
from Table2 t2 join
#SsnMap s
on t2.SocSecNum = s.SocSecNum;