Вот один из способов сделать это с помощью row_number()
и обновляемого cte:
with cte as (
select
c.first_name,
c.surname,
r.first_name r_first_name,
r.surname r_surname,
row_number() over(partition by c.customer_id order by newid()) rn
from tblCustomers c
cross join tblRandom_Data r
)
update cte
set first_name = r_first_name, surname = r_surname
where rn = 1
Cte генерирует декартово произведение обеих таблиц и влияет на случайное число для каждой записи в группах, имеющих одинаковые customer_id
. Внешний запрос выполняет фактическое обновление.
Демонстрация по БД Fiddlde
Пример данных:
select * from tblCustomers;
customer_id | first_name | surname
----------: | :--------- | :------
1 | <em>null</em> | <em>null</em>
2 | <em>null</em> | <em>null</em>
3 | <em>null</em> | <em>null</em>
4 | <em>null</em> | <em>null</em>
select * from tblRandom_Data;
first_name | surname
:--------- | :------
foo | bar
baz | zoo
После запуска обновления:
select * from tblCustomers;
customer_id | first_name | surname
----------: | :--------- | :------
1 | baz | zoo
2 | foo | bar
3 | baz | zoo
4 | foo | bar