Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server 2012:Perbedaan DATETIME antara sisipan dan pemicu

Karena sifat deklaratif SQL, mesin database mungkin ambil kebebasan untuk mengevaluasi bagian dari pernyataan SQL dalam urutan apa pun yang dianggap cocok (selama itu tidak memengaruhi semantik). Saran Anda bahwa GETUTCDATE() mungkin di-cache, adalah hal yang masuk akal.

Saya tahu ini tidak menjawab pertanyaan Anda. Tapi apa pun implementasi GETUTCDATE di SQL2012, itu mungkin berubah di versi mendatang. Jadi hindari mengandalkannya, atau peningkatan di masa mendatang bisa sangat merepotkan. Terapkan logika Anda dengan cara yang tidak bergantung pada asumsi apa pun terkait urutan evaluasi.

Dalam kasus spesifik Anda, saya melihat beberapa kemungkinan solusi.

  1. Jika Anda tidak memiliki masalah dengan OwningStatuses bersenang-senang sebentar nanti dari UserStatusesHistory , maka mungkin sudah membantu jika Anda mengirim langkah ketiga ke SQL Server sebagai kumpulan terpisah.
  2. Tukar langkah 2 dan 3; dan biarkan kueri pemicu OwningStatuses daripada membuat kencannya sendiri.
  3. Berhenti menggunakan pemicu; ada lebih dari satu alasan untuk mempertimbangkan hal ini.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memasukkan variabel dalam T-SQL untuk penyisipan massal?

  2. Memformat angka dengan koma tetapi tanpa desimal di SQL Server 2008 R2?

  3. Microsoft SQL Server:Adakah cara untuk mengetahui kapan catatan dibuat?

  4. parameter opsional di SQL Server disimpan proc?

  5. Gunakan NEWSEQUENTIALID() untuk Membuat GUID yang Bertambah di SQL Server