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

SQL Server 2012:Sự khác biệt DATETIME giữa chèn và trình kích hoạt

Do bản chất khai báo của SQL, công cụ cơ sở dữ liệu might có quyền tự do đánh giá các phần của câu lệnh SQL theo bất kỳ thứ tự nào mà nó thấy phù hợp (miễn là nó không ảnh hưởng đến ngữ nghĩa). Đề xuất của bạn rằng GETUTCDATE() có thể được lưu trong bộ nhớ cache, là một điều hợp lý.

Tôi biết điều này không trả lời câu hỏi của bạn. Nhưng bất kể việc triển khai GETUTCDATE trong SQL2012, nó cũng có thể thay đổi trong phiên bản tương lai. Vì vậy, hãy tránh dựa vào nó, nếu không những nâng cấp trong tương lai có thể trở thành một nỗi đau thực sự. Thực hiện logic của bạn theo cách không dựa trên bất kỳ giả định nào liên quan đến thứ tự đánh giá.

Trong trường hợp cụ thể của bạn, tôi thấy một số giải pháp khả thi.

  1. Nếu bạn không gặp vấn đề gì với OwningStatuses có một chút thời gian muộn hơn than UserStatusesHistory , thì nó có thể hữu ích nếu bạn gửi bước thứ ba tới SQL Server dưới dạng một lô riêng biệt.
  2. Hoán đổi các bước 2 và 3; và để truy vấn kích hoạt OwningStatuses thay vì tự đặt ngày.
  3. Ngừng sử dụng trình kích hoạt; có nhiều lý do để cân nhắc điều này.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đánh giá thiết lập giám sát hiệu suất cơ sở dữ liệu của bạn

  2. đã mua một bộ phim sớm hơn ngày đấu sĩ SQL SERVER

  3. Chọn thứ tự đánh giá mệnh đề ở đâu

  4. Tham chiếu con trỏ máy chủ SQL (Cú pháp, v.v.)

  5. Dynamic SELECT TOP @var trong SQL Server