Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

SysEndTime

Termin Definicja
SysEndTime

SysEndTime to kolumna tabeli temporalnej wskazująca moment zakończenia ważności danej wersji wiersza.

SysEndTime w tabeli temporalnej SQL Server

SysEndTime to zwyczajowa nazwa kolumny przechowującej końcową granicę okresu obowiązywania wersji wiersza w tabeli temporalnej programu Microsoft SQL Server. Sama nazwa nie jest słowem kluczowym ani specjalnym identyfikatorem wymaganym przez silnik. O jej roli decyduje definicja okresu systemowego, na przykład PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime), oraz włączenie wersjonowania za pomocą SYSTEM_VERSIONING = ON. Kolumna pełni wtedy funkcję jednego z dwóch znaczników czasu opisujących przedział ważności konkretnej wersji danych.

Wartość SysEndTime wskazuje moment, od którego dana wersja nie jest już aktualną wersją obowiązującą dla zapytań dotyczących czasu systemowego. SQL Server traktuje koniec okresu jako granicę wyłączną. Jeżeli więc jedna wersja obowiązuje do chwili zapisanej w SysEndTime, następna wersja może obowiązywać od dokładnie tego samego momentu, bez nakładania się okresów. Taki model pozwala odtworzyć stan tabeli z punktu w przeszłości oraz prześledzić kolejne zmiany tego samego wiersza.

Typ danych i znaczenie wartości granicznych

Kolumny początku i końca okresu systemowego w tabeli temporalnej SQL Server muszą używać typu datetime2. Najczęściej deklaruje się je z precyzją siedmiu miejsc po przecinku, czyli jako datetime2(7). Przykładowa definicja może wyglądać następująco: SysEndTime datetime2(7) GENERATED ALWAYS AS ROW END NOT NULL. Atrybut GENERATED ALWAYS AS ROW END informuje silnik, że wartość jest kontrolowana przez mechanizm temporalny, a nie przeznaczona do swobodnego ustawiania przez aplikację.

Dla aktualnych wierszy SQL Server zwykle zapisuje w kolumnie końca okresu wartość 9999-12-31 23:59:59.9999999. Nie oznacza ona rzeczywistego planowanego czasu zakończenia rekordu, lecz otwarty koniec przedziału: wersja pozostaje aktualna do chwili następnej zmiany albo usunięcia. Gdy wiersz zostanie zmodyfikowany, jego dotychczasowa wersja trafia do tabeli historii, a SysEndTime tej wersji zostaje ustawiony na czas zakończenia jej obowiązywania. Nowa wersja w tabeli bieżącej otrzymuje własny początek okresu i ponownie graniczną wartość końcową.

Znaczniki czasu systemowego są ustalane przez SQL Server w ramach obsługi transakcji. Dla tabel system-versioned temporal czas rozpoczęcia transakcji jest rejestrowany w standardzie UTC i służy do oznaczania momentu zmian wersji. Z tego powodu wartości SysEndTime należy interpretować jako czas systemowy silnika, a nie jako lokalny czas ustawiony na komputerze użytkownika. Przy prezentowaniu danych w aplikacji trzeba świadomie wykonać konwersję do właściwej strefy czasowej, jeżeli interfejs ma pokazywać godziny lokalne.

Wykorzystanie SysEndTime w zapytaniach

Kolumny SysEndTime nie trzeba odczytywać ręcznie, aby pobrać historyczny stan danych. SQL Server udostępnia składnię FOR SYSTEM_TIME, która korzysta z okresu zdefiniowanego dla tabeli. Zapytanie SELECT * FROM dbo.Orders FOR SYSTEM_TIME AS OF '2025-01-15T10:00:00' zwraca wersje wierszy obowiązujące w określonym momencie. Silnik porównuje podany czas z kolumnami początku i końca okresu, w tym z SysEndTime, uwzględniając granicę końcową jako wyłączną.

Inne warianty tej składni umożliwiają pobieranie zmian z przedziału czasu. FROM dbo.Orders FOR SYSTEM_TIME BETWEEN @od AND @do zwraca wersje aktywne w zakresie obejmującym obie granice, natomiast wariant CONTAINED IN ogranicza wynik do wersji całkowicie zawartych w zadanym przedziale. Do analizy pełnego przebiegu zmian używa się także ALL, które łączy dane z tabeli bieżącej i tabeli historii. Bezpośrednie filtrowanie po SysEndTime jest możliwe, ale wymaga zachowania poprawnych warunków granicznych i uwzględnienia wartości używanej dla aktywnych wierszy.

Przy analizie kolejnych wersji nie należy zakładać, że SysEndTime identyfikuje pojedynczą zmianę albo użytkownika, który ją wykonał. Kolumna opisuje wyłącznie czasową ważność wersji. Informacje o autorze operacji, źródle zmiany lub przyczynie modyfikacji wymagają osobnych kolumn audytowych i mechanizmów aplikacyjnych. Temporalne wersjonowanie pozwala odtworzyć stan danych, lecz samo w sobie nie zastępuje pełnego dziennika audytowego.

Diagnostyka tabel temporalnych i skutki błędnej konfiguracji

Podczas diagnostyki tabeli temporalnej warto sprawdzić, czy SysEndTime jest rzeczywiście oznaczone jako kolumna końca okresu, czy ma typ datetime2, czy jest niepuste oraz czy tabela ma poprawnie zdefiniowaną parę kolumn okresu. Pomocne są widoki katalogowe SQL Server, między innymi sys.tables z informacją o włączeniu wersjonowania oraz sys.periods, które opisuje okres systemowy. Nazwa kolumny może być inna, dlatego narzędzia diagnostyczne powinny odczytywać metadane, zamiast zakładać, że każdy okres kończy się dokładnie w kolumnie o nazwie SysEndTime.

Nieprawidłowe ręczne modyfikowanie schematu, zamiana typu danych albo usunięcie powiązania z definicją okresu może uniemożliwić działanie wersjonowania lub prowadzić do błędnej interpretacji historii. Podobny problem powstaje, gdy aplikacja porównuje czasy jako lokalne, mimo że SQL Server zapisuje znaczniki systemowe w UTC. W praktyce należy również kontrolować indeksy tabeli bieżącej i historii, ponieważ zapytania używające AS OF oraz filtrów czasowych mogą skanować duże zbiory historyczne. Sama kolumna SysEndTime nie gwarantuje dobrej wydajności; potrzebny jest indeks dopasowany do sposobu wyszukiwania, identyfikatora rekordu i zakresów czasu.

W środowisku serwisowym analiza SysEndTime może pomóc ustalić, czy problem wynika z aktualnego stanu rekordu, czy z wcześniejszej modyfikacji danych. Należy jednak zachować spójność między tabelą główną a tabelą historii i interpretować znaczniki czasu razem z transakcjami, które je utworzyły. Jeżeli historia została wyłączona, usunięta lub zmieniona poza kontrolowanym procesem administracyjnym, odtworzenie kompletnego przebiegu zmian może być niemożliwe.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę