2016-11-20 88 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()这是一个准随机结果。