Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

GETUTCDATE () có trả về cùng một giá trị nếu được sử dụng hai lần trong cùng một câu lệnh không?

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 ().



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thêm cột bảng mới vào vị trí thứ tự cụ thể trong Microsoft SQL Server

  2. Cách xuất kết quả truy vấn sang .csv hoặc Tệp được phân cách bằng tab trong SQL Server Management Studio (SSMS) - Hướng dẫn SQL Server / TSQL Phần 23

  3. Cách sử dụng IF ... THEN Logic trong SQL Server

  4. Sử dụng IDENT_CURRENT () để trả lại giá trị nhận dạng hiện tại trên cột nhận dạng trong SQL Server

  5. Giải thích một số toán tử SQL Server