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

时间:2013-02-25 18:19:37

标签: sql-server

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

MyTable我已经有几千行了。现在我想随机化OtherTableID,使其在OtherTable中具有一些随机(但有效)的条目值。

任何想法如何在一个简洁的查询中执行此操作,而不是使用游标?

2 个答案:

答案 0 :(得分: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;

只要dbo.OtherTable.ID是唯一的,就不会产生重复。这也取决于你所说的内容 - dbo.OtherTable中有更多行。

答案 1 :(得分:0)

编辑5:经过测试,如果你不关心重复,这个工作就像一个魅力。 100%随机。您可以将其调整为不允许重复。

;WITH X AS
(
SELECT  ROW_NUMBER() OVER(ORDER BY IdOtherTable) AS 'Row', IdOtherTable
    FROM    OtherTable
)




UPDATE  MyTable
SET     IdOtherTable = (SELECT IdOtherTable
             FROM    X
             WHERE   Row =   round((SELECT RAND() * (SELECT COUNT(IdOtherTable) 
                                              FROM      OtherTable)), 0, 1) + 1)