O SQL Server 2016 AT TIME ZONE
parece não-determinístico. No entanto, não consegui encontrar documentação oficialmente declarando isso ou dando uma justificativa para o raciocínio por trás disso.
Por que AT TIME ZONE
não é determinístico?
Exemplo mostrando não determinismo
Executando:
CREATE TABLE Test (
LegacyTimestamp DATETIME,
Timestamp AS LegacyTimestamp AT TIME ZONE 'Eastern Standard Time' PERSISTED
);
Retorna o seguinte erro:
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
fonte
fonte
Respostas:
AT TIME ZONE
emprega alguma lógica para calcular o horário de verão. Os valores de deslocamento do horário de verão não são imutáveis (estão sujeitos a alterações por meio de atualizações do Windows ) e estão contidos externamente no registro do Windows; portanto, aAT TIME ZONE
função não pode ser determinística, pois depende de dados externos.Da mesma forma, é por isso que, como
sys.time_zone_info
é uma exibição e não uma tabela de referência estática, ela precisa ser calculada dependendo dos valores do registro que contêm as informações mais atualizadas sobre o fuso horário.fonte
Adicionei AT TIME ZONE à lista não determinística sobre o tópico Deterministic and Noneterministic, e no tópico AT TIME ZONE, adicionei: Como algumas informações (como regras de fuso horário) são mantidas fora do SQL Server e estão sujeitas a alterações ocasionais, a função AT TIME ZONE é classificada como não determinística. Obrigado por trazer isso. Rick Byham, Manuais Online do SQL Server.
fonte