Au lieu de rand()
, utilisez newid()
, qui est recalculé pour chaque ligne du résultat. La manière habituelle est d'utiliser le modulo de la somme de contrôle. Notez que checksum(newid())
peut produire -2 147 483 648 et provoquer un débordement d'entier sur abs()
, nous devons donc utiliser modulo sur la valeur de retour de la somme de contrôle avant de la convertir en valeur absolue.
UPDATE CattleProds
SET SheepTherapy = abs(checksum(NewId()) % 10000)
WHERE SheepTherapy IS NULL
Cela génère un nombre aléatoire entre 0 et 9999.