GetDate()
không bao giờ xác định. Tính xác định có nghĩa là nó sẽ luôn trả về cùng một kết quả khi được truyền cùng một tham số.
Điểm chung với rand()
Nó được đánh giá một lần mỗi cột nhưng sau khi được đánh giá vẫn giữ nguyên cho tất cả các hàng.
Dễ dàng thấy hành vi này hơn với rand()
than getdate()
select top 4 rand(), rand()
from sys.objects
Đã trả lại
---------------------- ----------------------
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
Nếu bạn thử cách sau
select top 10 getdate(), getdate()
from sys.objects
và xem xét các thuộc tính toán tử ComputeScalar trong kế hoạch thực thi thực tế, bạn sẽ thấy rằng GetDate()
được đánh giá hai lần.
NB:Có thể hành vi đánh giá trên mỗi cột chứ không phải trên mỗi truy vấn đã thay đổi sau SQL 2000 (tôi không biết) nhưng đó không phải là những gì BOL định nghĩa là ý nghĩa của xác định.