Ändern des Schemas einer temporalen Tabelle mit Systemversionsverwaltung

Anwendungsbereich: JaSQL Server 2016 (13.x) und höher JaAzure SQL-Datenbank JaVerwaltete Azure SQL-Instanz

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 SysStartTime ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN SysEndTime ADD HIDDEN;

Wichtige 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).

  • Falls Sie eine nicht nullierbare Spalte hinzufügen oder eine vorhandene Spalte dahingehend ändern, dass sie nicht nullierbar wird, müssen Sie Standardwerte für die vorhandenen Zeilen angeben. Das System generiert einen zusätzlichen Standardwert mit demselben Wert und wendet ihn auf die Verlaufstabelle an. Das Hinzufügen von DEFAULT zu einer nicht leeren Tabelle ist in allen Editionen außer SQL Server Enterprise Edition (dort ist es ein Metadatenvorgang) ein Vorgang, der die Datengröße betrifft.

  • Das Hinzufügen von varchar(max)-, nvarchar(max)-, varbinary(max)- oder XML-Spalten mit Standardwerten ist in allen Editionen von SQL Serverein 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 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 , wenn es sich um eine temporale Tabelle mit Systemversionsverwaltung handelt. ALTER COLUMN 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 Art 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 (dies ist standardmäßig für Verlaufstabellen der Fall)
    • Hinzufügen von COLUMN_SET
    • Hinzufügen einer ROWGUIDCOL -Spalte oder Ändern einer vorhandenen Spalte in ROWGUIDCOL

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 TRAN
        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 DEFAULT 0;
        ALTER TABLE [dbo].[CompanyLocation]
    SET
         (
            SYSTEM_VERSIONING = ON
           ( HISTORY_TABLE = [dbo].[CompanyLocationHistory])
         );
    COMMIT ;

Nächste Schritte