生成两个查询,一个返回您想要替换的第二个列的顺序编号的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的其他领域。我假设你真正的员工表不只有1列,你需要在连接中引用emp_no和唯一字段,以确保他们被分配不同的数字,或者消除query1中两个重复项中的一个。