sql >> Database >  >> RDS >> Sqlserver

SQL Server 2012:DATETIME-verschillen tussen invoegingen en triggers

Vanwege het declaratieve karakter van SQL, kan de database-engine mogelijk neem de vrijheid om delen van een SQL-instructie te evalueren in elke gewenste volgorde (zolang het geen invloed heeft op de semantiek). Uw suggestie dat GETUTCDATE() in de cache kan worden opgeslagen, is aannemelijk.

Ik weet dat dit geen antwoord geeft op je vraag. Maar wat de implementatie van GETUTCDATE in SQL2012 ook is, het zou in een toekomstige versie kunnen veranderen. Dus vermijd erop te vertrouwen, anders kunnen toekomstige upgrades een echte pijn worden. Implementeer uw logica op een manier die niet afhankelijk is van aannames met betrekking tot de evaluatievolgorde.

In jouw specifieke geval zie ik een paar mogelijke oplossingen.

  1. Als je geen probleem hebt met OwningStatuses een beetje tijd hebben later dan UserStatusesHistory , dan kan het al helpen als je de derde stap als een aparte batch naar SQL Server stuurt.
  2. Verwissel stap 2 en 3; en laat de triggerquery OwningStatuses in plaats van zijn eigen datum te verzinnen.
  3. Stop met het gebruik van triggers; er is meer dan één reden om dit te overwegen.


  1. Probleem met uitvoeringsprocedure in PL/SQL Developer

  2. Hoe voer ik meerdere CASE WHEN-voorwaarden uit met SQL Server 2008?

  3. SQL Server 2012 Zoeken in volledige tekst installeren of toevoegen

  4. Reguliere expressie gebruiken binnen een opgeslagen procedure