sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server 2012:DATETIME-avvikelser mellan infogningar och utlösare

På grund av SQLs deklarativa karaktär kan databasmotorn ta dig friheten att utvärdera delar av en SQL-sats i vilken ordning som helst (så länge det inte påverkar semantiken). Ditt förslag att GETUTCDATE() kan vara cachad, är rimlig.

Jag vet att detta inte svarar på din fråga. Men oavsett implementeringen av GETUTCDATE i SQL2012, kan det mycket väl ändras i en framtida version. Så undvik att lita på det, eftersom framtida uppgraderingar kan bli en verklig smärta. Implementera din logik på ett sätt som inte förlitar sig på några antaganden om utvärderingsordning.

I ditt specifika fall ser jag några möjliga lösningar.

  1. Om du inte har några problem med OwningStatuses ha en tid lite senare än UserStatusesHistory , då kanske det redan hjälper om du skickar det tredje steget till SQL Server som en separat batch.
  2. Byt steg 2 och 3; och låt utlösningsfrågan OwningStatuses istället för att hitta på ett eget datum.
  3. Sluta använda triggers; det finns mer än en anledning att överväga detta.


  1. Hur väljer man poster med dubbletter av bara ett fält och alla andra fältvärden?

  2. Exklusive tabeller som inte stöds som ska fångas av Oracle Streams

  3. doctrine:build-schema ignorerar tabellkolumner

  4. Hur implementerar man en enkel låsmekanism för fleranvändarapplikation?