Sie müssen den Namen der Verlaufstabelle angeben, um die Datenkontinuität beim Ein- und Ausschalten der Systemversionierung zu gewährleisten. Dieses Verhalten wird in der Dokumentation zu ALTER TABLE erwähnt :
Wenn Sie das Argument HISTORY_TABLE nicht verwenden, generiert das System eine neue Verlaufstabelle, die dem Schema der aktuellen Tabelle entspricht, erstellt eine Verknüpfung zwischen den beiden Tabellen und ermöglicht dem System, den Verlauf jedes Datensatzes in der aktuellen Tabelle in der Tabelle aufzuzeichnen Verlaufstabelle.
Hier ist eine Demo. Ich werde die Beispieltabelle aus der Dokumentation erstellen:
CREATE TABLE dbo.Employee
(
[EmployeeID] int NOT NULL PRIMARY KEY CLUSTERED
, [Name] nvarchar(100) NOT NULL
, [Position] varchar(100) NOT NULL
, [Department] varchar(100) NOT NULL
, [Address] nvarchar(1024) NOT NULL
, [AnnualSalary] decimal (10,2) NOT NULL
, [ValidFrom] datetime2 (2) GENERATED ALWAYS AS ROW START
, [ValidTo] datetime2 (2) GENERATED ALWAYS AS ROW END
, PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON);
Dies führt zu einer Verlaufstabelle mit dem Namen MSSQL_TemporalHistoryFor_1253579504
. Jetzt werde ich die Systemversionierung deaktivieren und aktivieren:
ALTER TABLE dbo.Employee SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE dbo.Employee SET (SYSTEM_VERSIONING = ON);
Und ich bin in Ihrer genauen Situation:
Jetzt werde ich alles aufräumen:
ALTER TABLE dbo.Employee SET (SYSTEM_VERSIONING = OFF);
DROP TABLE dbo.Employee;
DROP TABLE dbo.MSSQL_TemporalHistoryFor_1253579504;
DROP TABLE dbo.MSSQL_TemporalHistoryFor_1253579504_D0055BB4;
Erstellen Sie dann die Tabelle mit einem bestimmten Namen der Verlaufstabelle:
CREATE TABLE dbo.Employee
(
[EmployeeID] int NOT NULL PRIMARY KEY CLUSTERED
, [Name] nvarchar(100) NOT NULL
, [Position] varchar(100) NOT NULL
, [Department] varchar(100) NOT NULL
, [Address] nvarchar(1024) NOT NULL
, [AnnualSalary] decimal (10,2) NOT NULL
, [ValidFrom] datetime2 (2) GENERATED ALWAYS AS ROW START
, [ValidTo] datetime2 (2) GENERATED ALWAYS AS ROW END
, PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeeHistory));
Schalten Sie dann die Systemversionierung aus und wieder ein, geben Sie jedoch weiterhin den Namen der Verlaufstabelle an:
ALTER TABLE dbo.Employee SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE dbo.Employee SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeeHistory));
Hinweis: In Ihrer speziellen Situation sollten Sie in der Lage sein, diese Syntax zu verwenden, um eine verlorene Verlaufstabelle wieder an Ihre Basistabelle anzuhängen
Keine zusätzlichen Tabellen:
Das wegnehmen
Geben Sie beim Erstellen von Zeittabellen oder Aktivieren der Systemversionierung immer explizit einen Namen für die Verlaufstabelle an.
In den MS-Dokumenten wird dies jetzt speziell auf der Seite Stoppen der Systemversionierung auf einer systemversionierten Zeittabelle aufgerufen :
Vergessen Sie beim erneuten Aktivieren der Systemversionierung nicht, das Argument HISTORY_TABLE anzugeben. Andernfalls wird eine neue Verlaufstabelle erstellt und der aktuellen Tabelle zugeordnet. Die ursprüngliche Verlaufstabelle ist weiterhin als normale Tabelle vorhanden, wird jedoch nicht der aktuellen Tabelle zugeordnet.