Ich habe heute eine Methode gesucht (gebingt) um 5 stellige PINS automatisch in eine SQL Tabelle einzufügen per TSQL. Dafür brauche ich eine Zufallszahl. Es gibt eine RAND Funktion die aber mit Verlaub so ziemlich das dümmste ist was ich seit langem gesehen habe. Der erzeugte Wert liegt zwischen 0 und 1 als Gleitkommazahl.
1) ein Update tabelle set pin= RAND() erzeugt immer die gleiche Zahl. Nur wenn RAND mehrmals aufgerufen wird kommt eine unterschiedliche Zahl raus.
2) Mann kann RAND per Parameter einen Startwert mitgeben. Die Doku empfiehlt einen Datumswert
SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) )
Nur sind die Server so schnell das, mehrfach innerhalb des gleichen Zeitwertes die Rand Methode aufgerufen wird und dann ist es wieder der gleiche Zufallswert.
Demzufolge nehme ich nun einen Feldwert um RAND zu steuern. Das Ergebnis wäre mit .NET sicher besser, aber für meine Zwecke reicht es.
UPDATE
dbo.Tabelle1 SET PIN = convert(int,RAND(feldx) * 100000)