2016-11-20 3 views
0

ランダムなカード番号を100個作成したいと思います。私はこれらの100行と内側の乱数のためにしばらくあります。 このコードでは乱数を作ることができますが、100行は常に同じ数になり、各行には新しいものが必要です。ランダムな値を持つ内部while

Create Table #Nr_Cartao 
(valor varchar(20) not null) 

declare @NrCartao varchar(20); 
declare @NrCartao16Digitos varchar(20); 
declare @counter int; 
declare @random int; 
declare @Nr_iterações int; 
declare @digitos int; 

set @Nr_iterações = 100; 
set @NrCartao9Digitos = ''; 
set @NrCartao = ''; 
set @counter = 0; 
set @digitos = 1 

While @counter < @Nr_iterações 
begin 

While @digitos <= 16 
Begin 

set @random = rand()*10 
set @NrCartao = @NrCartao + '' + CONVERT(varchar(20), @random) 

if (@digitos % 4) = 0 and @digitos < 16 
set @NrCartao = @NrCartao + '-' 

set @digitos= @digitos +1 

end; 

set @NrCartao16Digitos = @NrCartao; 
set @counter = @counter + 1; 

insert into #Nr_Cartao values(@NrCartao16Digitos); 

end 

select * 
from #Nr_Cartao 
go; 

お手伝いできますか?

答えて

0

、それだけで@digitos@NrCartao

INSERT INTO #Nr_Cartao 
    VALUES (@NrCartao16Digitos); 
    SET @digitos = 1 -- reset to 1 
    SET @NrCartao = '' -- to empty 
の値をリセットするために欠けています
0

あなたのコードは非常に手続きに見えますが、T-SQL 1でセットベースのアプローチを好む必要があります。

私は絶対にあなたが達成しようとするものを理解していないが、次の行がランダムソート順に1から100まであなたの数字をもたらす:

WITH row100 AS 
(
    SELECT TOP 100 ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS SortId 
    FROM sys.objects AS o --Should contain at least 100 rows... 
) 
SELECT * 
FROM row100 
ORDER BY NEWID() 

は100ランニングを持ち帰るCTE row100数字。 CTEがなければ、100行も取得できますが、実行中の数値は1〜100の範囲内にとどまらないでしょう。最後のSELECTは、擬似ランダムの結果であるORDER BY NEWID()です。あなたはまだあなたのクエリを続行しようとしている場合は

関連する問題