2016-11-20 5 views
0

Ich möchte 100 zufällige Kartennummern erstellen. Ich habe eine Weile für diese 100 Zeilen und eine innere Weile für Zufallszahlen. Mit diesem Code kann ich Zufallszahlen erstellen, aber die 100 Zeilen haben immer die gleiche Nummer und ich möchte eine neue für jede Zeile.innere während mit zufälligen Werten

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; 

Können Sie helfen?

Antwort

0

Wenn Sie noch mit Ihrer Anfrage fortzusetzen beabsichtigen, es fehlt nur Werte zurücksetzen für @digitos und @NrCartao

INSERT INTO #Nr_Cartao 
    VALUES (@NrCartao16Digitos); 
    SET @digitos = 1 -- reset to 1 
    SET @NrCartao = '' -- to empty 
0

Ihr Code sieht sehr Verfahren, aber mit T-SQL sollte man Set-basierten Ansätze bevorzugen.

ich nicht unbedingt verstehen, was Sie zu erreichen versuchen, aber die folgenden Zeilen finden Sie die Zahlen von 1 bis 100 in einer zufälligen Reihenfolge, um bringen:

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

WAK row100 zurück bringt 100 Lauf Zahlen. Ohne CTE würden Sie auch 100 Zeilen erhalten, aber die laufenden Zahlen würden nicht im Bereich von 1 bis 100 bleiben. Das letzte SELECT ergibt eine ORDER BY NEWID(), was ein quasizufälliges Ergebnis ist.

Verwandte Themen