sql >> Databáze >  >> RDS >> Sqlserver

SQL Server 2012:Nesrovnalosti DATETIME mezi vložkami a spouštěči

Vzhledem k deklarativní povaze SQL by databázový stroj mohl dovolte si vyhodnotit části příkazu SQL v libovolném pořadí, které uzná za vhodné (pokud to neovlivňuje sémantiku). Váš návrh, že GETUTCDATE() může být uložen do mezipaměti, je věrohodný.

Vím, že to neodpovídá na vaši otázku. Bez ohledu na implementaci GETUTCDATE v SQL2012 se však může v budoucí verzi změnit. Takže se na to nespoléhejte, protože budoucí upgrady se mohou stát skutečnou bolestí. Implementujte svou logiku způsobem, který se nespoléhá na žádné předpoklady týkající se pořadí hodnocení.

Ve vašem konkrétním případě vidím několik možných řešení.

  1. Pokud nemáte problém s OwningStatuses mít čas o něco později než UserStatusesHistory , pak už může pomoci, když odešlete třetí krok na SQL Server jako samostatnou dávku.
  2. Prohoďte kroky 2 a 3; a nechte spouštěcí dotaz OwningStatuses místo vymýšlení vlastního data.
  3. Přestaňte používat spouštěče; existuje více než jeden důvod, proč to zvážit.


  1. jak se dotazovat ze dvou tabulek?

  2. Vkládání do Oracle Nested Table v Javě

  3. Smazat jeden záznam z Entity Framework?

  4. Validace UNIQUE pole v Codeigniter se 2 indexy