Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server 2012:rozbieżności DATETIME między wstawkami a wyzwalaczami

Ze względu na deklaratywny charakter SQL silnik bazy danych może pozwól sobie na ocenę części instrukcji SQL w dowolnej kolejności, jaką uzna za stosowną (o ile nie wpływa to na semantykę). Twoja sugestia, aby GETUTCDATE() może być buforowany, jest prawdopodobny.

Wiem, że to nie odpowiada na twoje pytanie. Ale niezależnie od implementacji GETUTCDATE w SQL2012, może się to zmienić w przyszłej wersji. Unikaj więc polegania na nim, ponieważ przyszłe aktualizacje mogą stać się prawdziwym bólem. Zaimplementuj swoją logikę w sposób, który nie opiera się na żadnych założeniach dotyczących kolejności oceny.

W Twoim konkretnym przypadku widzę kilka możliwych rozwiązań.

  1. Jeśli nie masz problemu z OwningStatuses trochę czasu później niż UserStatusesHistory , to może już pomóc, jeśli wyślesz trzeci krok do SQL Server jako osobną partię.
  2. Zamień kroki 2 i 3; i niech zapytanie wyzwalacza OwningStatuses zamiast wymyślać własną randkę.
  3. Przestań używać wyzwalaczy; jest więcej niż jeden powód, aby to rozważ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. Techniki optymalizacji zapytań w SQL Server:5 najlepszych praktyk zwiększania wydajności zapytań

  2. HAS_DBACCESS() – Dowiedz się, czy użytkownik może uzyskać dostęp do bazy danych w SQL Server

  3. Porównanie typów danych daty i godziny w SQL Server

  4. jak przypisać wartość cte do zmiennej?

  5. Wczytaj wiele tabel z relacjami z t-sql do DataSet