sql Server 2016的
AT TIME ZONE
似乎是不确定的.但是,我还没有找到正式说明这一点的文件,也没有给出其背后推理的理由.
为什么AT TIME ZONE不确定?
显示非决定论的例子
执行:
CREATE TABLE Test ( LegacyTimestamp DATETIME,Timestamp AS LegacyTimestamp AT TIME ZONE 'Eastern Standard Time' PERSISTED );
返回以下错误:
Msg 4936,Level 16,State 1,Line 1 Computed column 'Timestamp' in table 'Test' cannot be persisted because the column is non-deterministic.
解决方法
在TIME ZONE
employs some logic计算夏令时. DST偏移值不是不可变的(它们可以通过
windows updates更改)并且包含在Windows注册表的外部,因此AT TIME ZONE功能不能确定,因为它依赖于外部数据.
同样,这就是sys.time_zone_info是视图而不是静态引用表的原因,需要根据具有最新时区信息的注册表值来计算它.