Создайте два запроса, которые возвращают emp_no, которые вы хотите заменить вторым столбцом, который нумеруется последовательно. Другой, который делает то же самое для случайных. Затем в обновлении присоединитесь к ним на основе чисел.
UPDATE employee
SET e.emp_no=r.rand_val
FROM (query1) e
JOIN (query2) r
ON e.number=r.number
Вероятно Query1 будет что-то вроде:
SELECT emp_no,row_number() OVER(ORDER BY emp_no) as number
FROM employee
WHERE employee.emp_no IN (SELECT emp_no FROM employee
GROUP BY emp_no HAVING COUNT(*)>1)
Вероятно Query2 будет что-то вроде:
SELECT rand_val,row_number() OVER(ORDER BY NEWID()) as number
FROM random_values
Так что все это было бы:
UPDATE employee
SET e.emp_no=r.rand_val
FROM (
SELECT emp_no,row_number() OVER(ORDER BY emp_no) as number
FROM employee
WHERE employee.emp_no IN (SELECT emp_no FROM employee
GROUP BY emp_no HAVING COUNT(*)>1)) e
JOIN (
SELECT rand_val,row_number() OVER(ORDER BY NEWID()) as number
FROM random_values) r
ON e.number=r.number
Это было какое-то время, вы могли бы присоединиться к ним обратно к столу сотрудника, а так:
UPDATE employee
SET e.emp_no=r.rand_val
FROM employee
JOIN
(
SELECT emp_no,row_number() OVER(ORDER BY emp_no) as number
FROM employee
WHERE employee.emp_no IN (SELECT emp_no FROM employee
GROUP BY emp_no HAVING COUNT(*)>1)) e
ON employee.emp_no=e.emp_no
JOIN (
SELECT rand_val,row_number() OVER(ORDER BY NEWID()) as number
FROM random_values) r
ON e.number=r.number
Но вы все равно могут возникнуть трудности с дубликатами и получать присвоен новый номер (или же случайное число), если вы не можете дифференцировать EMP_NO путем некоторых другое поле. Я предполагаю, что ваша реальная таблица сотрудников имеет не более одного столбца, и вам нужно будет ссылаться как на emp_no, так и на уникальное поле в соединении, чтобы удостовериться, что они получают назначенные разные числа или исключают один из двух дубликатов в query1.