Un éditeur utile a ajouté le "Select" avant chaque déclaration, mais l'intérêt de cet élément est qu'il peut générer des clés uniques pour chaque ligne d'une déclaration, et pas seulement pour un élément (pour cela, j'utiliserais la fonction Rand()). Par exemple : Select top 100 Rand(),* from tblExample
renvoie la même valeur aléatoire pour les 100 lignes.
Alors que : Sélectionner les 100 premiers ABS(CHECKSUM(NEWID()) % 10),* de tblexample
Renvoie une valeur aléatoire différente entre 0 et 9 sur chaque ligne de la déclaration. Ainsi, bien que la sélection facilite le copier-coller, vous pouvez copier la logique dans une instruction de sélection si c'est ce qui est nécessaire.
Ceci génère un nombre aléatoire entre 0-9
SELECT ABS(CHECKSUM(NEWID()) % 10)
1 à 6
SELECT ABS(CHECKSUM(NEWID()) % 6) + 1
3 à 6
SELECT ABS(CHECKSUM(NEWID()) % 4) + 3
Dynamique (basé sur le commentaire d'Eilert Hjelmeseths - merci à jiraiya pour la présentation visuelle)
SELECT ABS(CHECKSUM(NEWID()) % (@max - @min + 1)) + @min
Mis à jour sur la base des commentaires :
-
NEWID
génère une chaîne aléatoire (pour chaque ligne du retour)
-
CHECKSUM
prend la valeur d'une chaîne de caractères et crée un nombre
- module (
%
) divise par ce nombre et renvoie le reste (ce qui signifie que la valeur maximale est inférieure de un au nombre que vous avez utilisé).
-
ABS
transforme les résultats négatifs en résultats positifs
- puis ajouter un au résultat pour éliminer les résultats nuls (pour simuler un jet de dé).
1 votes
La réponse que vous avez là ne fonctionne que si vous avez des droits de type administrateur sur la table. Pour contourner ce problème, j'ai utilisé la clé primaire du champ comme germe. La distribution n'était pas brillante, mais elle servait le but.