2017-01-31 39 views
0

どのように我々は、ストアドプロシージャを使用して1万倍までの既存の行を繰り返すことができますか? whileループを使用する必要がありますか? 私のテーブルStudentは、現在、それはそれで10件のレコードを持っていName, ID, Marks.のような3つの列があります。繰り返し行

Sample Data: 
ID Name Marks 
1 John 88 
2 Dave 98 

Expected Data: 
ID Name Marks 
    1 John 88 
    2 Dave 98 
    1 John 88 
    2 Dave 98 
    1 John 88 
    2 Dave 98 
    1 John 88 
    2 Dave 98 

予想されるデータ行数は10,000である必要があります。

+0

あなたは* *既存の行を繰り返すことにより、何を意味するか説明してください。あなたは何を期待していますか?いくつかのサンプルデータと望ましい結果をお願いします。 – Siyual

+0

'while'ループ、数値表、または再帰的CTEを使用できます。 –

+0

数値表を使用したくない場合は、1000ユニオンを使用してください。 –

答えて

2

あなたは/数字テーブルを使用しないことができない場合、あなたは文が実行したい回数を指定するには、SSMSでGOを使用することができます。

Insert Student 
     (Id, Name, Marks) 
Select Distinct Id, Name, Marks 
From Student 
Go 5000 

上記の文は5,000を実行しますその結果、10,000レコードが挿入されました。

+0

既存の行が10個ある場合はどうなりますか?それらを値に追加するにはどうすればよいですか? select文を使用して既存の行を選択できますか? –

+0

@ananthreddy更新しました。これにより、各生徒は指定された回数だけ複製されます。 – Siyual

+0

実際はそれが私の必要条件です –

1

編集 - ...万行はカウント逃した。これは、アドホック番号/集計テーブルである

を修正...それはカウントしていますか?

Declare @YourTable table (ID int,Name varchar(50),Marks int) 
Insert Into @YourTable values 
(1,'John',88), 
(2,'Dave',98) 

;with cte0(N) As (Select 1 From (Values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) N(N)), 
     cteN(N) As (Select Top (10000/(select count(*) from @YourTable)) Row_Number() over (Order By (Select NULL)) From cte0 N1, cte0 N2, cte0 N3, cte0 N4) -- 10,000 
Select A.* 
From @YourTable A 
Cross Join cteN B 

それとも別のオプション

Select A.* 
From @YourTable A 
Cross Join (Select Top (10000/(select count(*) from @YourTable)) N=Row_Number() Over (Order By (Select Null)) From master..spt_values N1,master..spt_values N2) B