Mit SQL Server 2016 hatte Microsoft den Tabellentyp der "temporalen Tabellen" (alias "System-Versioned Tables") eingeführt, bei denen der SQL Server 2016 automatisch alle früheren Inhalte einer Tabelle in einer Historientabelle speichert. Eine normale SQL-Abfrage liefert immer den letzten Zustand, mit speziellen Abfragen kommt der Nutzer an alte Versionen.
Beispiel: Erweitern der Tabelle "Kunde" zur temporalen TabelleALTER TABLE Kunden ADD
ValidFrom datetime2 (0) GENERATED ALWAYS AS ROW START HIDDEN constraint DF_ValidFrom DEFAULT DATEADD(SECOND, -1, SYSUTCDATETIME()) , ValidTo datetime2 (0) GENERATED ALWAYS AS ROW END HIDDEN constraint DF_ValidTo DEFAULT '9999.12.31 23:59:59.99' , PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo);
ALTER TABLE Kunden SET (SYSTEMVERSIONING = ON (HISTORYTABLE = dbo.KundenHistory); GO
Ein Problem in der Praxis ist, dass der SQL Server bei der bisherigen Implementierung die veralteten Datensätze für immer aufbewahrt, sofern der Nutzer diese nicht manuell bzw. per Job löscht (vgl. [https://www.mssqltips.com/sqlservertip/4674/managing-temporal-table-history-in-sql-server-2016/].) Neu in der Version 2017 sind Aufbewahrungsrichtlinien (Retention Policies), mit denen man eine automatische Löschung nach n Tagen, Wochen, Monaten oder Jahren festlegen kann. Der folgende Befehl legt für die Datensätze der versionierten Tabelle "Kunde" eine Aufbewahrungsdauer von 14 Tagen fest:
ALTER TABLE Kunde SET (SYSTEMVERSIONING = ON (HISTORY_TABLE = dbo.KundenHistory, HISTORY_RETENTIONPERIOD = 14 DAYS)); GO
Es ist aber weiterhin nicht möglich, anstelle der Aufbewahrungszeit die Aufbewahrung auf eine bestimmte Anzahl von Versionen zu beschränken.
Langjährige Erfahrungen bei der Entwicklung von .NET-Anwendungen und dem Betrieb von Software auf der Microsoft-Plattform geben die Top-Experten von www.IT-Visions.de an Sie weiter.
Sie brauchen Unterstützung bei der Entwicklung Ihrer Software? Die Experten-Entwickler von MAXIMAGO entwickeln Ihre Anwendungen mit innovativen User Interfaces zum agilen Festpreis.