Published on

November 7, 2023

Génération de données aléatoires dans SQL Server

Avez-vous déjà eu besoin de récupérer un ensemble aléatoire d’enregistrements à partir d’une table de base de données ? Dans cet article, nous explorerons différentes approches pour y parvenir dans SQL Server.

Utilisation de RAND() pour retourner des données aléatoires

Une façon de générer des données aléatoires est d’utiliser la fonction RAND(). Cette fonction génère un nombre aléatoire, que vous pouvez ensuite associer à votre ensemble d’enregistrements d’origine. Cependant, il y a un problème avec cette approche. La fonction RAND() renvoie la même valeur pour l’ensemble de l’enregistrement, ce qui la rend inadaptée à notre objectif.

Par exemple, si nous exécutons la requête suivante :

SELECT TOP 5 NomProduit, RAND() as ValeurAléatoire 
FROM dbo.produits 
ORDER BY ValeurAléatoire

Nous obtiendrons la même ValeurAléatoire pour chaque enregistrement, ce qui donne une liste statique d’enregistrements. Cela ne résout pas notre problème de récupération d’un ensemble de données vraiment aléatoire.

Utilisation de NEWID() pour retourner des données aléatoires

Une solution plus simple consiste à utiliser la fonction NEWID(). Cette fonction renvoie un identifiant unique pour chaque ligne de données, garantissant que chaque valeur est différente. En triant le jeu de résultats par NEWID(), nous pouvons récupérer une liste aléatoire d’enregistrements.

Par exemple, pour récupérer les 5 premières lignes de la table produits dans un ordre aléatoire, nous pouvons utiliser la requête suivante :

SELECT TOP 5 NomProduit 
FROM dbo.produits 
ORDER BY NEWID()

Chaque fois que nous exécutons cette requête, nous obtiendrons un ensemble différent d’enregistrements. Cette approche offre un moyen simple d’obtenir une liste de données vraiment aléatoire.

Considérations de performance

Lors de l’utilisation de la fonction NEWID(), il est important de tenir compte des implications de performance, en particulier pour les grandes tables. La requête doit attribuer un identifiant unique à chaque ligne, trier les données, puis renvoyer le nombre souhaité de lignes en fonction de l’option TOP.

Pour atténuer les problèmes de performance, vous pouvez utiliser une clause WHERE pour limiter la portée des enregistrements avec lesquels vous travaillez. En réduisant le jeu de données, la requête sera plus rapide car elle opère sur un sous-ensemble de données plutôt que sur l’ensemble de la table.

Gardez à l’esprit que bien que la fonction NEWID() offre un moyen pratique de générer des données aléatoires, il est essentiel d’évaluer son impact sur les performances et d’ajuster votre approche en conséquence.

En conclusion, la génération de données aléatoires dans SQL Server peut être réalisée en utilisant la fonction NEWID(). En triant le jeu de résultats par NEWID(), vous pouvez récupérer une liste aléatoire d’enregistrements. Cependant, il est crucial de prendre en compte les implications de performance, en particulier pour les grandes tables, et d’optimiser vos requêtes en conséquence.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.