Warum produziert RAND () keine Zufallszahlen?

8

Ich habe auf eine Frage hieran geantwortet und gefeuert mein SSMS, um eine kleine Abfrage vor dem Posten zu testen, aber einige seltsame Ergebnisse erhalten. Hier ist die Abfrage:

%Vor%

Und hier ist die Ergebnismenge:

%Vor%

Wie ich erwartet habe Rand ohne einen Samen das gleiche Ergebnis in jeder Zeile, aber ich hatte gehofft, dass Rand mit einem Samen (Albiet nur die Zahlen 1 bis 9) ein bisschen besser als eine geordnete Liste innerhalb 0,0002 von einander tun würde !

Erhalten Sie das Gleiche? Das hört sich nach etwas an, das die Unvorsichtigen aufspüren könnte.

Wie ich sicher bin, wird das relevant sein:

%Vor%     
Stephen Turner 04.12.2011, 21:06
quelle

4 Antworten

14

RAND (Transact SQL) :

  

Gibt einen pseudozufälligen Gleitkommawert von 0 bis 1 zurück, exklusiv.

Und:

  

Wiederholte Aufrufe von RAND () mit dem gleichen Startwert geben die gleichen Ergebnisse zurück.

(Betonung meiner)

    
Oded 04.12.2011, 21:09
quelle
2

Würden Sie bitte mit der unten stehenden Abfrage versuchen, die immer die gewünschte Zufallszahl liefert.

%Vor%

Update : Laut Konversation habe ich meine Antwort wie folgt geändert:

%Vor%     
Elias Hossain 05.12.2011 07:41
quelle
2

Die CRYPT_GEN_RANDOM-Funktion in Elias 'Antwort hat mich dazu gebracht, an einer besseren Lösung zu arbeiten:

%Vor%

Dies erzeugt die gleiche Gleitkommazahl zwischen 0 und 1 wie RAND (), also könnte es auch vorkommen, dass ein Seed nicht verwendet wird. Es wird auch pro Reihe aufgerufen, wie die Probe zeigt. Im Gegensatz zu RAND, das denselben Seed verwendet, wird jedoch nicht das gleiche Ergebnis erzielt.

Hinweis

Dies funktioniert nicht mehr in:

%Vor%

als

%Vor%     
Stephen Turner 05.12.2011 14:49
quelle
1

um sicherzustellen, dass rand () für jede Zeile separat aufgerufen wird, tun Sie dies:

%Vor%     
A-K 05.12.2011 04:16
quelle

Tags und Links