SQL Server 2016 AT TIME ZONE
scheint nicht deterministisch zu sein. Es ist mir jedoch nicht gelungen, Unterlagen zu finden, die dies offiziell belegen oder eine Begründung für die Gründe dafür liefern.
Warum ist nicht AT TIME ZONE
deterministisch?
Beispiel, das Nicht-Determinismus zeigt
Ausführen:
CREATE TABLE Test (
LegacyTimestamp DATETIME,
Timestamp AS LegacyTimestamp AT TIME ZONE 'Eastern Standard Time' PERSISTED
);
Gibt den folgenden Fehler zurück:
Msg 4936, Level 16, State 1, Line 1
Computed column 'Timestamp' in table 'Test' cannot be persisted because the column is non-deterministic.
sql-server
sql-server-2016
timezone
Ben Gribaudo
quelle
quelle
Antworten:
AT TIME ZONE
verwendet eine Logik , um die Sommerzeit zu berechnen. DST-Offsetwerte sind nicht unveränderlich (sie können sich über Windows-Updates ändern ) und sind extern in der Windows-Registrierung enthalten. Daher kann dieAT TIME ZONE
Funktion nicht deterministisch sein, da sie auf externen Daten beruht.In ähnlicher Weise ist dies der Grund, warum
sys.time_zone_info
eine Ansicht und keine statische Referenztabelle ist. Sie muss in Abhängigkeit von den Registrierungswerten berechnet werden, die die aktuellsten Zeitzoneninformationen enthalten.quelle
Ich habe AT TIME ZONE zur nicht deterministischen Liste für das Thema Deterministisch und Nicht deterministisch hinzugefügt und im Thema AT TIME ZONE Folgendes hinzugefügt: Da einige Informationen (z. B. Zeitzonenregeln) außerhalb von SQL Server verwaltet werden und gelegentlichen Änderungen unterliegen, Die Funktion AT TIME ZONE wird als nicht deterministisch eingestuft. Vielen Dank, dass Sie dies angesprochen haben. Rick Byham, SQL Server-Onlinedokumentation.
quelle