Вы можете сделать это с помощью ROW_NUMBER()
оконной функции следующим образом:
with
cte1 as (
select *, row_number() over (order by newid()) rn
from tablename
),
cte2 as (
select *, row_number() over (order by newid()) rn
from tablename
)
update c1
set c1.name = c2.name, c1.UID = c2.UID
from cte1 c1 inner join cte2 c2
on c2.rn = c1.rn;
См. demo .
Но случайное чередование строк не имеет значения, потому что физический порядок строк не тот, о котором вы должны заботиться. Всегда используйте предложение ORDER BY
при извлечении строк на основе существующих столбцов или определяйте новый столбец для этой цели.