Utilisation de la fonction RAND

La fonction RAND calcule un nombre à virgule flottante aléatoire compris entre 0 et 1 et peut éventuellement prendre une valeur de type tinyint, int ou smallint pour le point de départ du nombre aléatoire à calculer.

Cet exemple calcule deux nombres aléatoires. La première fonction RAND() laisse SQL Server 2005 récupérer la valeur de départ et la deuxième fonction RAND() utilise la valeur 3 pour la position de début.

SELECT RAND(), RAND(3)

La fonction RAND est un générateur des nombres pseudo-aléatoires qui se comporte comme la fonction rand de la bibliothèque d'exécution en C. Si aucune valeur de départ n'est fournie, le système génère ses propres variables de départ. Si vous appelez la fonction RAND avec une valeur de départ, vous devez utiliser des variables de départ pour générer des nombres aléatoires. Si vous appelez la fonction RAND à plusieurs reprises avec la même valeur de départ, la fonction retourne la même valeur générée. Le script ci-dessous retourne la même valeur pour les appels à la fonction RAND car ces appels utilisent tous la même valeur de départ :

SELECT RAND(159784)
SELECT RAND(159784)
SELECT RAND(159784)

La méthode la plus courante permettant de générer des nombres aléatoires à partir de la fonction RAND consiste à inclure une valeur plus ou moins variable en tant que valeur de départ, c'est-à-dire, ajouter par exemple plusieurs parties d'une fonction GETDATE :

SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
           + (DATEPART(ss, GETDATE()) * 1000 )
           + DATEPART(ms, GETDATE()) )

Lorsque vous utilisez un algorithme basé sur une fonction GETDATE pour générer des valeurs de départ, la fonction RAND peut encore générer des valeurs en double si les appels de la fonction RAND sont faits dans l'intervalle de la plus petite partie de date utilisée dans l'algorithme. C'est le cas surtout si les appels à la fonction RAND sont inclus dans un lot unique. Plusieurs appels à la fonction RAND effectués dans un seul lot peuvent être exécutés au cours du même millième de seconde. Il s'agit du plus petit incrément de DATEPART. Dans ce cas, intégrez une valeur basée sur une donnée autre que l'heure pour générer les valeurs de départ.

Voir aussi

Autres ressources

RAND (Transact-SQL)
Fonctions mathématiques (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005