2016-11-20 50 views
0

我想創建100個隨機卡號。我有一段時間爲100行,內部爲隨機數。 使用此代碼我可以創建隨機數字,但100行始終具有相同的數字,我希望每行都有一個新數字。內部隨機值

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到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() 

的CTE row100帶回100運行數字。如果沒有CTE,你也會得到100行,但運行數不會保持在1到100的範圍內。最後的SELECT會產生ORDER BY NEWID()這是一個準隨機結果。