Nhờ các liên kết được cung cấp bởi gbn, tôi tin rằng điều này trả lời cho câu hỏi của tôi:
Điểm chung với rand () Nó được đánh giá một lần cho mỗi cột nhưng sau khi được đánh giá vẫn giữ nguyên cho tất cả các hàng .... nhìn vào 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.
Tôi đã kiểm tra và có vẻ như điều này vẫn xảy ra theo cách tương tự trong SQL Server 2008:GetUtcDate()
được đánh giá hai lần trong kế hoạch thực thi. Nó sẽ không tạo ra các kết quả khác nhau trên mỗi hàng, nhưng có thể nó có thể tạo ra một kết quả khác trên mỗi cột nếu thời gian kết thúc vừa phải.
Chỉnh sửa
Tôi thực sự có thể chứng minh hành vi này! Hãy thử điều này:
select GETUTCDATE(), RAND(), RAND(), ...[~3000 RAND()s]..., RAND(), GETUTCDATE()
from [TableOfYourChoice]
Trong thử nghiệm của mình, tôi đã kết thúc bằng 2011-05-17 20:47:34.247
trong cột đầu tiên và 2011-05-17 20:47:34.250
trong cột cuối cùng, hiển thị sự khác biệt 3 mili giây do đánh giá của tất cả RAND()
giữa các lần gọi đầu tiên và thứ hai tới GETUTCDATE ().