Sự cố OP đã có trong khi chỉ sử dụng rand()
là do nó được đánh giá một lần cho mỗi truy vấn .
Từ tài liệu :
Phương pháp tiếp cận được mô tả bên dưới sẽ xóa tối ưu hóa và ngăn chặn hành vi này, vì vậy rand()
được đánh giá một lần trên mỗi hàng :
dateadd( second
, rand(cast(newid() as varbinary)) * 43200
, cast('08:00:00' as time) )
-
newid()
tạo giá trị duy nhất của loạiuniqueidentifier
; - giá trị được chuyển đổi với
cast
được sử dụng làm hạt giống trongrand([seed])
hàm tạofloat
giả ngẫu nhiên giá trị từ 0 đến 1 và với tư cách là hạt giống luôn là duy nhất, giá trị trả về cũng là duy nhất.