Ta rada przyda się każdemu kto nie jest doświadczonym programistą, jeżeli chodzi o systemy korzystające z serwerów baz danych.
Czego rzecz się tyczy? Dat. A konkretnie godzin, albo może nawet minut.
Wiele razy widziałem aplikacje, w których na przykład mieliśmy kod procedury składowanej pobierającej dane:
...
@date DATETIME --parametr procedury
...
SELECT * FROM Tabela WHERE DataWstawienia < @date
...
oraz przykładowo procedura wstawiająca dane:
...
INSERT INTO Tabela(..., DataWstawienia) VALUES(..., GETDATE())
...
Z pozoru wszystko jest ok prawda? Problem zaczyna się kiedy spełnione są dwa warunki:
1) zależy nam na dokładności
2) baza danych jest na innym serwerze niż nasza aplikacja
Gdzie problem?
Procedura pobierająca dane przyjmuje datę jako parametr, zaś wstawiająca pobiera ją funkcją GETDATE(). Co zaś się stanie, jeżeli oba komputery (serwer bazy danych i aplikacji) nie mają zsynchronizowanych zegarków? Klapa. Okaże się, że czasem niektóre dane będą błędnie wybierane z uwagi na różnice pomiędzy zegarami.