@NoofRept int を宣言する
id=1 の tbl_Name から id,Name を選択
id |Name
1 |XXXXXXX
私の要件これはこのレコードを繰り返します @NoofRept Time
id |Name
1 |XXXXXXX
1 |XXXXXXX
1 |XXXXXXX
1 |XXXXXXX
@NoofRept int を宣言する
id=1 の tbl_Name から id,Name を選択
id |Name
1 |XXXXXXX
私の要件これはこのレコードを繰り返します @NoofRept Time
id |Name
1 |XXXXXXX
1 |XXXXXXX
1 |XXXXXXX
1 |XXXXXXX
最大 2047 未満のレコードを繰り返したい場合は、 table を使用できますMaster..spt_values
。これはシステム テーブルであり、タイプ P には 0 から 2047 までの連番があります。
DECLARE @NoofRept INT = 10
SELECT t.ID, t.Name
FROM tbl_Name t
CROSS JOIN Master..spt_Values v
WHERE t.ID = 1
AND v.Type = 'P'
AND v.Number BETWEEN 1 AND @NoofRept
これ以上必要な場合は、必要CROSS JOIN
な行数を取得するためにテーブルが必要になります。
SELECT ID, Name
FROM tbl_Name
CROSS JOIN
( SELECT rpt = ROW_NUMBER() OVER(ORDER BY a.Number)
FROM Master..spt_Values a
CROSS JOIN Master..spt_Values b
--CROSS JOIN Master..spt_values c
--CROSS JOIN Master..spt_values d
) v
WHERE ID = 1
AND v.rpt BETWEEN 1 AND @NoofRept
必要に応じて結合のコメントを外します
テストされていない疑似コードですが、次のようなものがうまくいくかもしれません:
DECLARE @sql nvarchar(max);
DELCARE @i int;
SET @i = 1;
SET @sql = 'select id,Name from tbl_Name where id=1'
WHILE @i < @NoofRept
BEGIN
SET @sql = @sql + 'UNION select id,Name from tbl_Name where id=1'
SET @i = @i + 1;
END
EXEC sp_executesql @sql;