大量データによる性能テストを行う際に、テーブルごとに2000000件のデータを用意し、データベースに挿入する必要がありました。 もともとEXCELにデータを作成し、テキストファイルに保存し、bcpツールでSQLServerにデータを導入する用法を採用しましたが、 件数が多くて、Excelは対応できません。コピペの操作やファイル保存などの手間もかかりますので、他の方法があるか探してみました。 そして、下記のページを発見し、実際に試してみました。

SQL Serverに1億件のテストデータを高速に作成する

結果はとても良かったです。

5フィールドのテーブルは2000000件のデータ作成と挿入で20秒程かかりました。 50フィールドのテーブルは2000000件のデータ作成と挿入で1分6秒でした。

いい方法ですから、ここでメモしておきます。

Declare @p_NumberOfRows Bigint 
Select @p_NumberOfRows=1000000; 
With Base As
  (
    Select 1 as n
    Union All
    Select n+1 From Base Where n < Ceiling(SQRT(@p_NumberOfRows))
  ),
  Expand As
  (
    Select 1 as C From Base as B1, Base as B2
  ),
  Nums As
  (
    Select Row_Number() OVER(ORDER BY C) As n From Expand
  )
INSERT INTO TestTable 
  Select n, 'DATA' + right('0000000000' + convert(varchar, n), 10)
    from Nums  Where n<=@p_NumberOfRows
OPTION (MaxRecursion 0);