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

SQL Server:hấp dẫn bởi GETDATE ()

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nhanh nhất / dễ dàng nhất để sử dụng Tìm kiếm / Thay thế thông qua tất cả các quy trình được lưu trữ

  2. Ba thắng lợi về hiệu suất máy chủ SQL dễ dàng

  3. Làm cách nào để thêm khóa chính auto_increment trong cơ sở dữ liệu SQL Server?

  4. Trả về một giá trị và một tập hợp kết quả từ asp cổ điển thủ tục được lưu trữ

  5. Lời khuyên về hiệu suất SQL Server từ Brent Ozar và Pinal Dave