SQL Server 2016 AT TIME ZONE
tampaknya tidak deterministik. Namun, saya belum dapat menemukan dokumentasi yang secara resmi menyatakan ini atau memberikan alasan tentang alasan di baliknya.
Mengapa tidak AT TIME ZONE
deterministik?
Contoh Menampilkan Non-Determinisme
Mengeksekusi:
CREATE TABLE Test (
LegacyTimestamp DATETIME,
Timestamp AS LegacyTimestamp AT TIME ZONE 'Eastern Standard Time' PERSISTED
);
Mengembalikan kesalahan berikut:
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
sumber
sumber
Jawaban:
AT TIME ZONE
menggunakan beberapa logika untuk menghitung Daylight Savings Time. Nilai offset DST tidak dapat diubah (mereka dapat berubah melalui pembaruan windows ) dan terkandung secara eksternal dalam registri Windows, sehinggaAT TIME ZONE
fungsi tersebut tidak dapat ditentukan karena bergantung pada data eksternal.Demikian pula, inilah sebabnya mengapa
sys.time_zone_info
tampilan dan bukan tabel referensi statis, perlu dihitung tergantung pada nilai registri yang memiliki informasi zona waktu paling terbaru.sumber
Saya telah menambahkan AT TIME ZONE ke daftar nondeterministic pada topik Deterministic dan Nondeterministic, dan dalam topik AT TIME ZONE, saya menambahkan: Karena beberapa informasi (seperti aturan zona waktu) dikelola di luar SQL Server dan dapat berubah sewaktu-waktu, fungsi AT TIME ZONE digolongkan sebagai nondeterministic. Terima kasih telah membicarakan ini. Rick Byham, SQL Server Buku Online.
sumber