Zamiast rand()
, użyj newid()
, która jest obliczana ponownie dla każdego wiersza w wyniku. Zwykłym sposobem jest użycie modulo sumy kontrolnej. Zauważ, że checksum(newid())
może wytworzyć -2 147 483 648 i spowodować przepełnienie liczb całkowitych w abs()
, więc musimy użyć modulo na wartości zwracanej sumy kontrolnej przed konwersją na wartość bezwzględną.
UPDATE CattleProds
SET SheepTherapy = abs(checksum(NewId()) % 10000)
WHERE SheepTherapy IS NULL
To generuje losową liczbę od 0 do 9999.