3

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

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

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

4

2 回答 2

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

于 2013-02-25T19:06:03.223 回答
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)
于 2013-02-25T19:15:52.693 回答