Ä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 in SPARSE, wenn die Verlaufstabelle auf DATA_COMPRESSION = PAGE oder DATA_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 in ROWGUIDCOL
  • Ändern einer NULL-Spalte in NOT 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;