Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server 2012:discrepanze DATETIME tra inserimenti e trigger

A causa della natura dichiarativa di SQL, il motore di database potrebbe prendersi la libertà di valutare parti di un'istruzione SQL nell'ordine che ritiene opportuno (purché non influisca sulla semantica). Il tuo suggerimento che GETUTCDATE() potrebbe essere memorizzato nella cache, è plausibile.

So che questo non risponde alla tua domanda. Ma qualunque sia l'implementazione di GETUTCDATE in SQL2012, potrebbe cambiare in una versione futura. Quindi evita di fare affidamento su di esso, o futuri aggiornamenti potrebbero diventare una vera seccatura. Implementa la tua logica in un modo che non si basi su alcuna ipotesi relativa all'ordine di valutazione.

Nel tuo caso specifico, vedo alcune possibili soluzioni.

  1. Se non hai problemi con OwningStatuses avendo un po' di tempo più tardi di UserStatusesHistory , potrebbe già essere utile inviare il terzo passaggio a SQL Server come batch separato.
  2. Scambia i passaggi 2 e 3; e lascia che il trigger interroghi OwningStatuses invece di inventare la propria data.
  3. Smetti di usare i trigger; c'è più di un motivo per considerare questo.