Ändern des Schemas einer temporalen Tabelle mit Systemversion

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-DatenbankAzure SQL Managed Instance

Verwenden Sie die ALTER TABLE -Anweisung, um eine Spalte hinzuzufügen, zu ändern oder zu entfernen.

Beispiele

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.mycompany.com';

ALTER TABLE dbo.Department
    ADD TempColumn INT;

GO

ALTER TABLE dbo.Department
    DROP COLUMN TempColumn;

/* Setting IsHidden property for period columns.
Use ALTER COLUMN <period_column> DROP HIDDEN to clear IsHidden flag */

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

Wichtige Hinweise

  • Um das Schema der temporalen Tabelle zu ändern, ist dieCONTROL -Berechtigung für aktuelle Tabellen und Verlaufstabellen erforderlich.

  • Während eines Vorgangs ALTER TABLE verfügt das System für beide Tabellen über eine Schemasperre.

  • 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.

  • Wenn die Zeilengröße nach dem Hinzufügen von Spalten den Grenzwert für die Zeilengröße überschreitet, können keine neuen Spalten 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 alle Spalten in dieser Tabelle automatisch durch das System befüllt werden.

  • Die Onlineoption (WITH (ONLINE = ON) hat keine Auswirkungen auf ALTER TABLE ALTER COLUMN temporale Tabellen mit Systemversion. Die ALTER-Spalte wird nicht als online ausgeführt, unabhängig davon, welcher Wert für die OPTION ONLINE angegeben wurde.

  • Sie können verwenden ALTER COLUMN , um die Eigenschaft für Periodenspalten zu ändern IsHidden .

  • Sie können direct für die folgenden Schemaänderungen nicht verwenden ALTER . Legen Sie für diese Arten von Änderungen fest SYSTEM_VERSIONING = OFF.

    • Hinzufügen einer berechneten Spalte
    • Hinzufügen einer IDENTITY -Spalte
    • Hinzufügen einer SPARSE-Spalte oder Ändern einer vorhandenen Spalte in SPARSE , wenn die Verlaufstabelle auf DATA_COMPRESSION = PAGE oder DATA_COMPRESSION = ROWfestgelegt ist. Dies ist die Standardeinstellung für die Verlaufstabelle.
    • 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

Das folgende Beispiel veranschaulicht das Ändern 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;

Nächste Schritte