Warum ist AT TIME ZONE nicht deterministisch?


18

SQL Server 2016 AT TIME ZONEscheint 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 ZONEdeterministisch?

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.

4
Drei Wörter. Sommerzeit.
Paparazzo

2
Willkommen zum Albtraum der Zeit. Ich wünschte fast, es wäre obligatorisch, wenn Sie Zeit speichern, und Sie hätten auch welche Zeitzone gespeichert. Ich würde so viel an Kopfschmerzmedikamenten sparen.
Eric S

Soeben wurde ein Microsoft Connect-Objekt erstellt , in dem die Aktualisierung der Dokumentation angefordert wird, um den Nichtdeterminismus von 'AT TIME ZONE' widerzuspiegeln.
Ben Gribaudo

Antworten:


20

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 die AT TIME ZONEFunktion nicht deterministisch sein, da sie auf externen Daten beruht.

In ähnlicher Weise ist dies der Grund, warum sys.time_zone_infoeine Ansicht und keine statische Referenztabelle ist. Sie muss in Abhängigkeit von den Registrierungswerten berechnet werden, die die aktuellsten Zeitzoneninformationen enthalten.


1
Aber sollte es nicht in Bezug auf das umzurechnende Datum berechnet werden? Wenn es nicht deterministisch ist, kann sich die Regel für den Beginn der Sommerzeit in der Zukunft ändern, wie es 2009 der
Fall war

@ Random832 Richtig! Ich habe einige Details dazu übersprungen, ich habe aktualisiert, um klarer zu sein.
LowlyDBA

2
@ Random832, berücksichtige nicht nur vergangene, sondern auch zukünftige Daten. Wenn ein zukünftiges Datum auf der Grundlage der heute geltenden Zeitänderungsregeln gespeichert wird, wird der Wert ungültig, wenn sich die Regeln zwischen jetzt und dann ändern.
Dan Guzman,

1
John: Das sind gute Informationen, aber wäre es technisch nicht genauer, dies ein wenig neu zu ordnen, um zu sagen, dass der eigentliche Grund dafür, dass es nicht deterministisch ist, nur in der externen Abhängigkeit vom Abrufen der Informationen aus der Registrierung liegt? Sicher, warum die Informationen von dort abgerufen werden müssen, anstatt fest in den App-Code (dh die Hauptursache) codiert zu werden, ist hauptsächlich darauf zurückzuführen, wie häufig sich die DST-Regeln ändern und dass neue Zeitzonen eingeführt werden können. aber das ist wirklich zweitrangig, oder? Unabhängig vom "Warum" sollte jede externe Abhängigkeit jede Funktion nicht deterministisch machen.
Solomon Rutzky

1
Genial! Zu Ihrer Information habe ich hier einige interessante Informationen gefunden - en.wikipedia.org/wiki/Tz_database -, die anscheinend eines der wenigen Dokumente sind (zumindest das, was ich bisher finden konnte), die darauf hinweisen, dass die Sommerzeit nicht das einzige ist wechseln. Nach dem, was ich aus der Datei C: \ Windows \ Globalization \ Time Zone \ timezones.xml ersehen kann, können sich sogar die Basisoffsets im Laufe der Zeit ändern, obwohl dies seit 1970 seltener der Fall ist. +1 :-) (musste dies erneut veröffentlichen, da der Link einen schlechten Charakter hatte)
Solomon Rutzky

1

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.


2
Dies sollte eher ein Kommentar als eine Antwort sein!
Kin Shah
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.