テーブルの行を N 件に増やしたい場合

メモ
TOP 句には、式も渡せるのでサブクエリも使える
TOP (Transact-SQL)


行数を増やすには、単純な連番テーブルと必要な数だけマッチする条件で結合したらよい。
単純な連番テーブルは、CTE で作成
今回の例では、元のデータをあるカラムに入っている値の数だけ増加させるという例

use [TEST]
CREATE TABLE [テスト] ( 
  [Id] int identity(1, 1) primary key, 
  [名前] nvarchar(30), 
  [分割件数] int not null 
)
GO

INSERT INTO [テスト] ( [名前], [分割件数] ) VALUES 
('10個に増やす', 10), 
('5個に増やす', 5), 
('1個のまま', 1), 
('3個に増やす', 3)

GO
SELECT * FROM [テスト] 
GO

WITH [CTE](行連番) AS ( 
  SELECT 1 
  UNION ALL 
  SELECT [行連番] + 1 
  FROM [CTE] 
) 
SELECT 
  [テスト].[Id] 
  , [テスト].[名前] 
  , [テスト].[分割件数] 
  , [DUMMY].[行連番] 
FROM 
  [テスト] INNER JOIN ( 
    SELECT TOP ((SELECT MAX([テスト].[分割件数]) FROM [テスト])) 
      [行連番] 
    FROM [CTE] 
    -- ORDER BY [行連番] ここに ORDER BY いれると、無限ループするよ
  ) [DUMMY] ON ( 
    [DUMMY].[行連番] <= [テスト].[分割件数] 
  ) 
ORDER BY 
  [テスト].[Id] 
  , [DUMMY].[行連番] 
OPTION (MAXRECURSION 0)
GO
DROP TABLE [テスト]
GO

実行イメージ