2009-05-10 17 views
1

Wie beziehe ich eine int-Spalte, die derzeit leer ist, mit Zufallszahlen ohne Duplikate?So füllen Sie eine Datenbankspalte mit Zufallszahlen

+1

Wie viele Nummern? In welcher Entfernung sollen die Zahlen liegen? Welche Datenbank-Engine? –

+8

Zufallszahlen ohne Duplikate sind keine Zufallszahlen. –

+0

Microsoft SQL Server –

Antwort

1

Ich nehme an, Sie könnten die Spalte einen Primärschlüssel zur Vermeidung von Duplikaten machen, obwohl das eine Art Hack ist. Sie können den Schlüssel später entfernen.

---- Create the variables for the random number generation 
DECLARE @Random INT; 
DECLARE @Upper INT; 
DECLARE @Lower INT; 
DECLARE @Index integer 

---- This will create a random number between 1 and 999 
SET @Lower = 1 ---- The lowest random number 
SET @Upper = 999 ---- The highest random number 
SET @Index = 0 --- A while loop counter 

--- Loop from 0 to 10 
WHILE @Index < 10 
BEGIN 
    SELECT 'loop counter = ', @index 
    SELECT @Random = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0) 
    --Insert @Random here. 
    SET @index = @index + 1 
END 
+0

Vielen Dank –

+0

Schöne, obwohl seit dem OP für 'keine Duplikate' gefragt, sollten Sie wahrscheinlich ein IF NOT EXISTS irgendwo verwenden ... – edosoft

9

Wenn dies eine vorhandene Tabelle zu dem hinzugefügt Sie eine neue INT-Spalte können Sie etwas tun:

UPDATE MyTable 
SET MyIntColumn = CONVERT(int, RAND(CHECKSUM(NEWID())) * 10000); 

Dies wird die leere Spalte mit Zufallszahlen zwischen 1 und 10000 bevölkert.

+0

Ich denke, der Bereich wäre zwischen 0 und 9999, aber das funktioniert gut. Ich frage mich, was es tut, aber ohne den 'CHECKSUM (NEWID()) 'Teil bekommst du für immer die gleiche Nummer. Ich denke, du musst mit verschiedenen Werten säen, um unterschiedliche Werte zu erhalten? –

Verwandte Themen