Aufgrund der deklarativen Natur von SQL kann die Datenbank-Engine möglicherweise Nehmen Sie sich die Freiheit, Teile einer SQL-Anweisung in beliebiger Reihenfolge auszuwerten (solange dies die Semantik nicht beeinflusst). Ihr Vorschlag, dass GETUTCDATE()
zwischengespeichert werden könnte, ist plausibel.
Ich weiß, das beantwortet deine Frage nicht. Aber was auch immer die Implementierung von GETUTCDATE in SQL2012 ist, es könnte sich durchaus in einer zukünftigen Version ändern. Vermeiden Sie es also, sich darauf zu verlassen, oder zukünftige Upgrades könnten zu einem echten Problem werden. Implementieren Sie Ihre Logik auf eine Weise, die sich nicht auf Annahmen bezüglich der Auswertungsreihenfolge stützt.
In Ihrem speziellen Fall sehe ich einige mögliche Lösungen.
- Wenn Sie kein Problem mit
OwningStatuses
haben etwas später Zeit haben alsUserStatusesHistory
, dann hilft es vielleicht schon, wenn Sie den dritten Schritt als separaten Batch an SQL Server schicken. - Schritte 2 und 3 vertauschen; und lassen Sie den Trigger
OwningStatuses
abfragen anstatt sich ein eigenes Datum auszudenken. - Verwenden Sie keine Trigger mehr; Es gibt mehr als einen Grund, dies in Betracht zu ziehen.