SQL Server 2016 ne AT TIME ZONE
semble pas déterministe. Cependant, je n'ai pas été en mesure de trouver de documentation indiquant officiellement cela ou donnant une justification quant au raisonnement derrière cela.
Pourquoi est AT TIME ZONE
non déterministe?
Exemple montrant le non-déterminisme
Exécution:
CREATE TABLE Test (
LegacyTimestamp DATETIME,
Timestamp AS LegacyTimestamp AT TIME ZONE 'Eastern Standard Time' PERSISTED
);
Renvoie l'erreur suivante:
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
la source
la source
Réponses:
AT TIME ZONE
emploie une certaine logique pour calculer l'heure d'été. Les valeurs de décalage DST ne sont pas immuables (elles sont sujettes à modification via les mises à jour Windows ) et sont contenues en externe dans le registre Windows, donc laAT TIME ZONE
fonction ne peut pas être déterministe car elle s'appuie sur des données externes.De même, c'est pourquoi
sys.time_zone_info
s'agit d'une vue et non d'une table de référence statique, elle doit être calculée en fonction des valeurs de registre qui disposent des informations de fuseau horaire les plus à jour.la source
J'ai ajouté AT TIME ZONE à la liste non déterministe de la rubrique déterministe et non déterministe, et dans la rubrique AT TIME ZONE, j'ai ajouté: étant donné que certaines informations (telles que les règles de fuseau horaire) sont conservées en dehors de SQL Server et sont sujettes à des modifications occasionnelles, la fonction AT TIME ZONE est classée comme non déterministe. Merci de le mentionner. Rick Byham, documentation en ligne de SQL Server.
la source