3

MyTable外部キーフィールドを持つテーブルがありますOtherTableID

にはすでに数千行ありMyTableます。ここOtherTableIDで、のエントリのランダムな(ただし有効な)値を持つようにランダム化しOtherTableます。

カーソルを使用する以外に、1つのきちんとしたクエリでこれを行う方法はありますか?

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 に答える