Zuflle die keine sind in TSQL

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)

Kommentare (1) -

Fumus
20.04.2012 12:20:29 #

statt Datum könnten man auch newid() verwenden. Dann ist das defintiv ein anderer Wert. Eine Möglichkeit wäre: select Left(Abs(Checksum(newid())),4)

Kommentare sind geschlossen