如何随机化SQL中的外键值?

Sha*_*ica 3 sql-server

我有一个表MyTable,它有一个外键字段OtherTableID.

我已经有几千行了MyTable.现在我想随机化,OtherTableID以便它具有一些随机(但有效)的条目值OtherTable.

任何想法如何在一个简洁的查询中做到这一点,没有使用游标?

Aar*_*and 9

;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.