AT TIME ZONE neden belirsizdir?


18

SQL Server 2016'nın AT TIME ZONEbelirsiz olduğu anlaşılıyor. Ancak, resmi olarak bunu belirten veya arkasındaki gerekçeye ilişkin bir gerekçe veren belgeleri bulamadım.

Niçin AT TIME ZONEbelirsizdir?

Determinizmsizliği Gösteren Örnek

yürütülmesi:

CREATE TABLE Test (
    LegacyTimestamp DATETIME,
    Timestamp AS LegacyTimestamp AT TIME ZONE 'Eastern Standard Time' PERSISTED
); 

Aşağıdaki hatayı döndürür:

Msg 4936, Level 16, State 1, Line 1
Computed column 'Timestamp' in table 'Test' cannot be persisted because the column is non-deterministic.

4
Üç kelime. Günışığı Tasarruf zamanı.
paparazzo

2
Zaman olarak bilinen kabusa hoş geldiniz. Keşke zamanı sakladığınızda zorunlu olsaydı, aynı zamanda hangi zaman dilimini de sakladınız. Baş ağrısı ilacında çok fazla tasarruf edeceğim.
Eric S

'AT TIME ZONE'un determinizmsizliğini yansıtacak şekilde güncellenmesini isteyen bir Microsoft Connect öğesi oluşturduk .
Ben Gribaudo

Yanıtlar:


20

AT TIME ZONE Yaz Saati uygulamasını hesaplamak için mantık kullanır . DST ofset değerleri değiştirilemez ( Windows güncelleştirmeleri aracılığıyla değiştirilebilir ) ve Windows kayıt defterinde harici olarak bulunurlar, bu nedenle AT TIME ZONEişlev dış verilere bağlı olduğu için deterministik olamaz.

Benzer şekilde, sys.time_zone_infostatik bir başvuru tablosu değil de bu nedenle görünümdür, en güncel saat dilimi bilgilerine sahip kayıt defteri değerlerine bağlı olarak hesaplanması gerekir.


1
Ancak, dönüştürülmekte olan tarihe göre hesaplanmamalıdır? Eğer belirleyici değilse, bunun nedeni gün ışığından yararlanma gününün başlayacağı kuralın 2009'da olduğu gibi gelecekte değişebileceğidir.
Random832

@ Random832 Doğru! Bunun için bazı ayrıntıları atladım, daha açık olacak şekilde güncelledim.
LowlyDBA

2
@ Random832, sadece geçmiş tarihleri ​​değil gelecekteki tarihleri ​​de göz önünde bulundurun. Gelecekteki bir tarih, bugün var olan zaman değişikliği kurallarına göre saklanırsa, kurallar şimdi ve sonra değişirse değer geçersiz olur
Dan Guzman

1
John: Bu iyi bir bilgi, ancak deterministik olmama nedeninin sadece kayıt defterinden bilgi alma konusundaki dış bağımlılıktan kaynaklandığını söylemek için bunu biraz yeniden düzenlemek daha teknik olarak doğru olmaz mı? Tabii, neden uygulama koduna (yani temel neden) kodlanmış olmanın aksine, oradan bilgi alması gerekiyor, çoğunlukla DST kurallarının ne sıklıkta değiştiğinden ve yeni Zaman Dilimlerinin tanıtılabileceğinden, ama bu gerçekten ikincil, değil mi? Ancak "neden" ne bakılmaksızın, herhangi bir dış bağımlılık, herhangi bir işlevi belirleyici olmayan yapmalıdır.
Solomon Rutzky

1
Müthiş! FYI, burada oldukça ilginç bilgiler buldum - en.wikipedia.org/wiki/Tz_database - DST'nin tek şey olmadığını gösteren birkaç belgeden biri (en azından şimdiye kadar bulabildiğim) gibi görünüyor değişmek. C: \ Windows \ Globalization \ Time Zone \ timezones.xml dosyasına bakarak söyleyebileceğimden , baz ofsetler bile zamanla değişebilir, ancak 1970'den beri daha az sıklıkta. +1 :-) (bağlantıda kötü bir karakter olduğu için bunu yeniden yayınlamak zorunda kaldı)
Solomon Rutzky

1

AT TIME ZONE Deterministic ve Nondeterministic konuda belirleyici olmayan listeye ekledim ve AT TIME ZONE konusunda ekledim: Bazı bilgiler (saat dilimi kuralları gibi) SQL Server dışında tutulduğundan ve zaman zaman değişikliğe tabi olduğundan, AT TIME ZONE işlevi, belirsiz olmayan olarak sınıflandırılır. Bunu getirdiğin için teşekkürler. Rick Byham, SQL Server Çevrimiçi Kitaplar.


2
Bu bir cevaptan ziyade bir yorum olmalı!
Kin Shah
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.