生成兩個查詢,一個返回您想要替換的第二個列的順序編號的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中兩個重複項中的一個。