En lugar de rand() , usa newid() , que se vuelve a calcular para cada fila del resultado. La forma habitual es utilizar el módulo de la suma de comprobación. Tenga en cuenta que checksum(newid()) puede producir -2,147,483,648 y causar un desbordamiento de enteros en abs() , por lo que debemos usar el módulo en el valor devuelto de la suma de comprobación antes de convertirlo en un valor absoluto.
UPDATE CattleProds
SET SheepTherapy = abs(checksum(NewId()) % 10000)
WHERE SheepTherapy IS NULL
Esto genera un número aleatorio entre 0 y 9999.