2017-05-11 9 views
0

ダミーレコードを100個作成します。ここでT-SQLでこのロジックに問題がありますか?

は、私が書いたコードです:

create table #Dummy (ID int, Name varchar(100)) 

Declare @temp int = 1 
declare @Name varchar(100) = '' 

while @temp >= 100 
begin 
    set @Name = 'Name - ' + convert(varchar(100), @temp) 

    insert into #Dummy 
    values (@temp, @Name) 

    set @temp = @temp + 1 
end 

select * from #Dummy 

が、私は何もテーブルに挿入されていないされ得る....

+6

1は、あなたがしたい> = 100ではありません<=あなたはこのIMHOのためのループを使用するべきではありません。 – scsimon

+0

私の間違いありがとうございます –

答えて

-1

この試してみてください。ここでは

CREATE TABLE #Dummy 
(ID INT, 
Name VARCHAR(100) 
); 
DECLARE @temp INT= 1; 
DECLARE @Name VARCHAR(100)= ''; 
WHILE @temp <= 100 
    BEGIN 
     SET @Name = 'Name - '+CONVERT(VARCHAR(100), @temp); 
     INSERT INTO #Dummy 
     VALUES 
     (@temp, 
     @Name 
     ); 
     SET @temp += 1; 
    END; 
SELECT * 
FROM #Dummy; 
4

を別の代替であります。私は実際にテストデータを作成するためにもループが好きではありません。私は、このようなことのために集計表または数値表を使用します。私はこのような考え方で私のシステムに便利にしています。

create View [dbo].[cteTally] as 

WITH 
    E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)), 
    E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows 
    E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10E+4 or 10,000 rows max 
    cteTally(N) AS 
    (
     SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4 
    ) 
select N from cteTally 

これを取得したら、簡単に任意の量のテストデータを簡単に作成できます。このようなもの。

create table #Dummy(ID int , Name varchar(100)) 

insert into #Dummy 
select N, 'Name - ' + CONVERT(varchar(4), N) 
from cteTally t 
where t.N <= 100 

select * 
from #Dummy 
+1

私のコメントにリンクする以前の集計テーブルの投稿の1つを探していましたが、1つの笑を見つけることができませんでした。 – scsimon

+2

私はあなたが自分の投稿の1つにリンクすることを謙虚にしています。私はあなたが1つを見つけるのを助けることができたのでうれしいです。 :) –

0

あなたは以下のようにROW_NUMBER使用して番号を生成することができます

create table #Dummy (ID int, Name varchar(100)) 

Insert into #Dummy (Id, Name) 
select RowN as Id, Concat('Name - ', RowN) as Name from (
    select top (100) RowN = Row_number() over (order by (select null)) from sys.objects s1, sys.objects s2 
) a 

select * from #dummy 
関連する問題