Ändern des Schemas einer temporalen Tabelle mit Systemversionsverwaltung
Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-Datenbank Azure SQL Managed Instance
Verwenden Sie die Anweisung ALTER TABLE
, um eine Spalte hinzuzufügen, zu ändern oder zu entfernen.
Hinweise
Um das Schema der temporalen Tabelle zu ändern, ist die CONTROL
-Berechtigung für aktuelle Tabellen und Verlaufstabellen erforderlich.
Während eines ALTER TABLE
-Vorgangs richtet das System eine Schemasperre auf beide Tabellen ein.
Die angegebene Schemaänderung wird entsprechend an eine Verlaufstabelle weitergegeben (je nach Art der Änderung).
Das Hinzufügen von varchar(max), nvarchar(max), varbinary(max) oder XML-Spalten mit Standardwerten ist in allen Editionen von SQL Server ein Datenaktualisierungsvorgang.
Falls die Zeilengröße nach dem Hinzufügen von Spalten die Zeilengrößenbeschränkung überschreitet, können keine neuen Spalten mehr online hinzugefügt werden.
Ziehen Sie das Entfernen von Standardeinschränkungen für die Verlaufstabelle in Betracht, sobald Sie eine Tabelle mit einer neuen NOT NULL
-Spalte erweitert haben, da das System alle Spalten in dieser Tabelle automatisch befüllt.
Die Onlineoption (WITH (ONLINE = ON
) hat keine Auswirkungen auf ALTER TABLE ALTER COLUMN
in temporalen Tabellen. Die ALTER
-Spalte wird nicht im Modus „online“ durchgeführt. Dies gilt unabhängig vom Wert, der für die Option ONLINE
festgelegt wurde.
Sie können ALTER COLUMN
verwenden, um die IsHidden
-Eigenschaft für Zeitraumspalten zu ändern.
Sie können keine direkte ALTER
-Anweisung für die folgenden Schemaänderungen verwenden. Legen Sie für diese Arten von Änderungen SYSTEM_VERSIONING = OFF
fest.
- Hinzufügen einer berechneten Spalte
- Hinzufügen einer
IDENTITY
-Spalte - Hinzufügen einer
SPARSE
-Spalte oder Ändern einer vorhandene Spalte inSPARSE
, wenn die Verlaufstabelle aufDATA_COMPRESSION = PAGE
oderDATA_COMPRESSION = ROW
festgelegt ist, was standardmäßig für Verlaufstabellen der Fall ist. - Hinzufügen von
COLUMN_SET
- Hinzufügen einer
ROWGUIDCOL
-Spalte oder Ändern einer vorhandenen Spalte inROWGUIDCOL
- Ändern einer
NULL
-Spalte inNOT NULL
, wenn die Spalte Nullwerte in der aktuellen oder Verlaufstabelle enthält
Beispiele
A. Ändern des Schemas einer temporalen Tabelle
Hier sind einige Beispiele, mit denen das Schema einer temporalen Tabelle geändert werden kann.
ALTER TABLE dbo.Department
ALTER COLUMN DeptName varchar(100);
ALTER TABLE dbo.Department
ADD WebAddress nvarchar(255) NOT NULL
CONSTRAINT DF_WebAddress DEFAULT 'www.example.com';
ALTER TABLE dbo.Department
ADD TempColumn INT;
GO
ALTER TABLE dbo.Department
DROP COLUMN TempColumn;
B. Hinzufügen von Zeitraumspalten mit dem HIDDEN-Flag
ALTER TABLE dbo.Department
ALTER COLUMN ValidFrom ADD HIDDEN;
ALTER TABLE dbo.Department
ALTER COLUMN ValidTo ADD HIDDEN;
Mit ALTER COLUMN <period_column> DROP HIDDEN
können Sie das ausgeblendete Flag in einer Zeitraumspalte löschen.
C. Ändern des Schemas mit SYSTEM_VERSIONING auf OFF
Das folgende Beispiel zeigt die Änderung des Schemas, bei dem die Einstellung SYSTEM_VERSIONING = OFF
noch erforderlich ist (Hinzufügen einer IDENTITY
-Spalte). In diesem Beispiel wird die Datenkonsistenzprüfung deaktiviert. Diese Überprüfung ist nicht erforderlich, wenn die Schemaänderung innerhalb einer Transaktion durchgeführt wird, da keine gleichzeitigen Datenänderungen auftreten können.
BEGIN TRANSACTION
ALTER TABLE [dbo].[CompanyLocation] SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE [CompanyLocation] ADD Cntr INT IDENTITY (1, 1);
ALTER TABLE [dbo].[CompanyLocationHistory]
ADD Cntr INT NOT NULL
CONSTRAINT DF_Cntr DEFAULT 0;
ALTER TABLE [dbo].[CompanyLocation] SET
(
SYSTEM_VERSIONING = ON
(HISTORY_TABLE = [dbo].[CompanyLocationHistory])
);
COMMIT;
Zugehöriger Inhalt
- Temporale Tabellen
- Erste Schritte mit temporalen Tabellen mit Systemversionsverwaltung
- Verwalten der Beibehaltung von Verlaufsdaten in temporalen Tabellen mit Systemversionsverwaltung
- Temporale Tabellen mit Systemversionsverwaltung für speicheroptimierte Tabellen
- ALTER TABLE (Transact-SQL)
- Erstellen einer temporären Tabelle mit Systemversionsverwaltung
- Ändern von Daten in einer temporalen Tabelle mit Systemversionsverwaltung
- Abfragen von Daten in einer temporalen Tabelle mit Systemversionsverwaltung
- Beenden der Versionsverwaltung in einer temporalen Tabelle mit Systemversionsverwaltung