Udostępnij za pośrednictwem


Zmienianie schematu tabeli czasowej w wersji systemowej

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje Azure SQL DatabaseAzure SQL Managed InstanceSQL Database w usłudze Microsoft Fabric

Użyj instrukcji ALTER TABLE, aby dodać, zmienić lub usunąć kolumnę.

Uwagi

CONTROL uprawnienia do tabel bieżących i historycznych są wymagane do zmiany schematu tabeli czasowej.

Podczas operacji ALTER TABLE system posiada blokadę schematu na obu tabelach.

Określona zmiana schematu jest odpowiednio propagowana do tabeli historii (w zależności od typu zmiany).

Dodawanie varchar(max), nvarchar(max), varbinary(max) lub kolumn XML z wartościami domyślnymi, to operacja aktualizacji danych we wszystkich wersjach programu SQL Server.

Jeśli rozmiar wiersza po dodaniu kolumny przekracza limit rozmiaru wiersza, nie można dodać nowych kolumn w trybie online.

Po rozszerzeniu tabeli przy użyciu nowej kolumny NOT NULL rozważ usunięcie domyślnego ograniczenia w tabeli historii, ponieważ system automatycznie wypełnia wszystkie kolumny w tej tabeli.

Opcja online (WITH (ONLINE = ON) nie ma wpływu na ALTER TABLE ALTER COLUMN z tabelami czasowymi. ALTER kolumna nie działa jako online, niezależnie od tego, która wartość została określona dla opcji ONLINE.

Możesz użyć ALTER COLUMN, aby zmienić właściwość IsHidden dla kolumn okresowych.

Nie można użyć ALTER bezpośrednio dla następujących zmian schematu. W przypadku tych typów zmian ustaw SYSTEM_VERSIONING = OFF.

  • Dodawanie obliczonej kolumny
  • Dodawanie kolumny IDENTITY
  • Dodanie kolumny SPARSE lub zmiana istniejącej kolumny na SPARSE, gdy tabela historii jest ustawiona na DATA_COMPRESSION = PAGE lub DATA_COMPRESSION = ROW, która jest domyślną wartością tabeli historii.
  • Dodawanie COLUMN_SET
  • Dodawanie kolumny ROWGUIDCOL lub zmienianie istniejącej kolumny na ROWGUIDCOL
  • Zmiana kolumny NULL na NOT NULL, jeśli kolumna zawiera wartości null w tabeli bieżącej lub historii

Przykłady

A. Zmienianie schematu tabeli czasowej

Oto kilka przykładów, które zmieniają schemat tabeli czasowej.

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. Dodaj kolumny okresu przy użyciu flagi HIDDEN

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

Możesz użyć ALTER COLUMN <period_column> DROP HIDDEN, aby wyczyścić ukrytą flagę w kolumnie okresu.

C. Zmienianie schematu z wyłączoną opcją SYSTEM_VERSIONING.

W poniższym przykładzie pokazano zmianę schematu, w którym ustawienie SYSTEM_VERSIONING = OFF jest nadal wymagane (dodanie kolumny IDENTITY). W tym przykładzie wyłączono sprawdzanie spójności danych. Ta kontrola jest niepotrzebna, gdy zmiana schematu jest wprowadzana w ramach transakcji, ponieważ nie mogą wystąpić żadne współbieżne zmiany danych.

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;