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

SQL Server 2012:DATETIME uoverensstemmelser mellem indsættelser og triggere

På grund af den deklarative karakter af SQL kan databasemotoren tag dig den frihed at evaluere dele af en SQL-sætning i den rækkefølge, den finder passende (så længe det ikke påvirker semantikken). Dit forslag om at GETUTCDATE() kan være cachelagret, er plausibel.

Jeg ved, at dette ikke besvarer dit spørgsmål. Men uanset implementeringen af ​​GETUTCDATE i SQL2012, kan den meget vel ændre sig i en fremtidig version. Så undgå at stole på det, ellers kan fremtidige opgraderinger blive en reel smerte. Implementer din logik på en måde, der ikke er afhængig af nogen antagelser vedrørende evalueringsrækkefølge.

I dit specifikke tilfælde ser jeg et par mulige løsninger.

  1. Hvis du ikke har noget problem med OwningStatuses har en tid lidt senere end UserStatusesHistory , så hjælper det måske allerede, hvis du sender det tredje trin til SQL Server som en separat batch.
  2. Skift trin 2 og 3; og lad udløserforespørgslen OwningStatuses i stedet for at finde på sin egen dato.
  3. Stop med at bruge triggere; der er mere end én grund til at overveje dette.


  1. Sådan vises en dato i tysk format i SQL Server (T-SQL)

  2. Brug af MySQL Galera Cluster Replication til at skabe en geo-distribueret klynge:Anden del

  3. Brug af PIVOT i SQL Server 2008

  4. Fejl ved lagring af geodjango PointField