SQLで乱数を使ってテストデータを作る

SQLServerには乱数を求めるRAND関数があるので、これを使ってテストデータを作れそうだが、ちょっと簡単ではなかった。



まずテストデータを登録する1000行のテーブルを作る。


英語の点数をRAND関数を使って埋めてみよう。update文を使えば1行で書ける。

update [aサンプルテスト結果] set [英語] = 100 * rand()

書けるのだが、、、結果を見るとすべて同じ値になっている。これはいけない。


RAND関数の引数を指定すると、違う値が得られるはずなので書き換えてみる。

update [aサンプルテスト結果] set [英語] = 100 * rand([no])

しかし、2行目以降はみな同じ値だった。これは使えないなあ。


SQLServer2005以降のRAND関数は、1文の中では同じ値しか返さないらしい。

となると、ループを回すしかなさそう。上のヘルプにあるサンプルコードを参考に書いてみる。

DECLARE @counter smallint
SET @counter = 0
WHILE @counter < 1000
   BEGIN
   update [aサンプルテスト結果] set [英語] = rand() * 100
             where [no] = @counter
      SET @counter = @counter + 1
   END
GO

結果を見ると、いい感じにランダムな値になっている。


エクセルでデータの散布図を作ってみると、一様に分布してますな。乱数ぽい。




コメント

このブログの人気の投稿

varchar をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。