我有一个表MyTable,它有一个外键字段OtherTableID.
我已经有几千行了MyTable.现在我想随机化,OtherTableID以便它具有一些随机(但有效)的条目值OtherTable.
任何想法如何在一个简洁的查询中做到这一点,没有使用游标?
;WITH x AS
(
/* apply a random row number to the other table */
SELECT ID, rn = ROW_NUMBER() OVER (ORDER BY NEWID())
FROM dbo.OtherTable
),
y AS
(
/* apply a sequential row number to the source table */
SELECT ID, OtherTableID, rn = ROW_NUMBER() OVER (ORDER BY ID)
FROM dbo.MyTable
)
/* now perform an update using a join on those row numbers */
UPDATE y SET OtherTableID = x.ID
FROM y INNER JOIN x
ON y.rn = x.rn;
Run Code Online (Sandbox Code Playgroud)
只要dbo.OtherTable.ID是唯一的,这不应该产生重复.这也取决于你所说的 - 有更多的行dbo.OtherTable.