Thay vì rand()
, sử dụng newid()
, được tính toán lại cho mỗi hàng trong kết quả. Cách thông thường là sử dụng modulo của tổng kiểm tra. Lưu ý rằng checksum(newid())
có thể tạo ra -2,147,483,648 và gây tràn số nguyên trên abs()
, vì vậy chúng ta cần sử dụng modulo trên giá trị trả về tổng kiểm tra trước khi chuyển đổi nó thành giá trị tuyệt đối.
UPDATE CattleProds
SET SheepTherapy = abs(checksum(NewId()) % 10000)
WHERE SheepTherapy IS NULL
Điều này tạo ra một số ngẫu nhiên từ 0 đến 9999.