SQL Server 2016 AT TIME ZONE
wydaje się niedeterministyczny. Jednak nie byłem w stanie znaleźć dokumentacji oficjalnie stwierdzającej to ani uzasadniającej jej uzasadnienie.
Dlaczego jest AT TIME ZONE
niedeterministyczny?
Przykład pokazujący brak determinizmu
Wykonywanie:
CREATE TABLE Test (
LegacyTimestamp DATETIME,
Timestamp AS LegacyTimestamp AT TIME ZONE 'Eastern Standard Time' PERSISTED
);
Zwraca następujący błąd:
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
źródło
źródło
Odpowiedzi:
AT TIME ZONE
stosuje pewną logikę do obliczania czasu letniego. Wartości przesunięcia DST nie są niezmienne (mogą ulec zmianie poprzez aktualizacje systemu Windows ) i są zawarte zewnętrznie w rejestrze systemu Windows, dlatego teżAT TIME ZONE
funkcja nie może być deterministyczna, ponieważ opiera się na danych zewnętrznych.Podobnie, dlatego
sys.time_zone_info
jest widokiem, a nie statyczną tabelą odniesienia, należy go obliczyć w zależności od wartości rejestru, które zawierają najbardziej aktualne informacje o strefie czasowej.źródło
Dodałem AT TIME ZONE do listy niedeterministycznej w temacie Deterministycznym i niedeterministycznym, aw temacie AT TIME ZONE dodałem: Ponieważ niektóre informacje (takie jak reguły strefy czasowej) są przechowywane poza SQL Server i mogą podlegać sporadycznym zmianom, funkcja AT TIME ZONE jest klasyfikowana jako niedeterministyczna. Dziękuję za poruszenie tego tematu. Rick Byham, SQL Server Books Online.
źródło