为什么 AT TIME ZONE 是不确定的?

Ben*_*udo 18 sql-server timezone sql-server-2016

SQL Server 2016AT TIME ZONE似乎是不确定的。但是,我一直无法找到正式说明这一点或对其背后的推理给出理由的文档。

为什么是AT TIME ZONE不确定的?

显示非确定性的示例

执行:

CREATE TABLE Test (
    LegacyTimestamp DATETIME,
    Timestamp AS LegacyTimestamp AT TIME ZONE 'Eastern Standard Time' PERSISTED
); 
Run Code Online (Sandbox Code Playgroud)

返回以下错误:

Msg 4936, Level 16, State 1, Line 1
Computed column 'Timestamp' in table 'Test' cannot be persisted because the column is non-deterministic.
Run Code Online (Sandbox Code Playgroud)

Low*_*n M 21

AT TIME ZONE 使用一些逻辑来计算夏令时。DST 偏移值不是一成不变的(它们可能会通过Windows 更新进行更改)并且外部包含在 Windows 注册表中,因此该AT TIME ZONE函数无法确定,因为它依赖于外部数据。

同样,这就是为什么sys.time_zone_info是视图而不是静态引用表的原因,它需要根据具有最新时区信息的注册表值进行计算。

  • @Random832,不仅要考虑过去的日期,还要考虑未来的日期。如果根据今天存在的时间更改规则存储未来日期,如果规则在现在和那时之间更改,则该值将无效, (2认同)