SQL Server 2016 AT TIME ZONE
parece no ser determinista. Sin embargo, no he podido encontrar documentación que lo declare oficialmente o que justifique el razonamiento detrás de esto.
¿Por qué es AT TIME ZONE
no determinista?
Ejemplo que muestra no determinismo
Ejecutando:
CREATE TABLE Test (
LegacyTimestamp DATETIME,
Timestamp AS LegacyTimestamp AT TIME ZONE 'Eastern Standard Time' PERSISTED
);
Devuelve el siguiente error:
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
fuente
fuente
Respuestas:
AT TIME ZONE
emplea cierta lógica para calcular el horario de verano. Los valores de desplazamiento de DST no son inmutables (están sujetos a cambios a través de actualizaciones de Windows ) y están contenidos externamente en el registro de Windows, por lo que laAT TIME ZONE
función no puede ser determinista ya que depende de datos externos.Del mismo modo, esta es la razón por la cual
sys.time_zone_info
es una vista y no una tabla de referencia estática, debe calcularse en función de los valores del registro que tienen la información de zona horaria más actualizada.fuente
Agregué AT TIME ZONE a la lista no determinista en el tema Deterministic and Nondeterministic, y en el tema AT TIME ZONE, agregué: Dado que cierta información (como las reglas de zona horaria) se mantiene fuera de SQL Server y está sujeta a cambios ocasionales, la función AT TIME ZONE se clasifica como no determinista. Gracias por mencionar esto. Rick Byham, Libros en pantalla de SQL Server.
fuente