Změna schématu systémem verzované časové tabulky

Platí na: SQL Server 2016 (13.x) a novější verze Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Pomocí příkazu ALTER TABLE můžete přidat, změnit nebo odebrat sloupec.

Remarks

K CONTROL změně schématu časové tabulky potřebujete povolení k aktuální a historické tabulce.

Během ALTER TABLE operace systém drží zámek schématu na obou tabulkách.

Database Engine propaguje změnu schématu do tabulky historie v závislosti na typu změny.

Přidání sloupců varchar(max), nvarchar(max), varbinary(max) nebo xml s výchozími hodnotami je operace aktualizace dat ve všech edicích SQL Server.

Pokud velikost řádku po přidání sloupce překročí limit velikosti řádku, nelze online přidávat nové sloupce.

Jakmile rozšíříte tabulku o nový sloupec NOT NULL, zvažte zrušení výchozího omezení tabulky historie, protože systém automaticky naplní všechny sloupce v této tabulce.

Online možnost (WITH (ONLINE = ON) nemá žádný vliv na ALTER TABLE ALTER COLUMN s dočasnými tabulkami. Operace se sloupcem ALTER se nespustí online bez ohledu na hodnotu, kterou zadáte pro volbu ONLINE.

Pomocí ALTER COLUMN můžete změnit vlastnost IsHidden pro sloupce období.

Přímé ALTER nemůžete použít pro následující změny schématu. U těchto typů změn nastavte SYSTEM_VERSIONING = OFF.

  • Přidání počítaného sloupce
  • Přidání sloupce IDENTITY
  • Přidání sloupce SPARSE nebo změna existujícího sloupce na SPARSE, když je tabulka historie nastavena na DATA_COMPRESSION = PAGE nebo DATA_COMPRESSION = ROW, což je výchozí nastavení tabulky historie.
  • Přidání COLUMN_SET
  • Přidání sloupce ROWGUIDCOL nebo změna existujícího sloupce na ROWGUIDCOL
  • Změna sloupce NULL na NOT NULL, pokud sloupec obsahuje hodnoty null v aktuální tabulce nebo v tabulce historie

Examples

A. Změna schématu dočasné tabulky

Zde je několik příkladů, které mění schéma časové tabulky.

ALTER TABLE dbo.Department
    ALTER COLUMN DeptName VARCHAR (100);

ALTER TABLE dbo.Department
    ADD WebAddress NVARCHAR (255)
        CONSTRAINT DF_WebAddress DEFAULT 'www.example.com' NOT NULL;

ALTER TABLE dbo.Department
    ADD TempColumn INT;
GO

ALTER TABLE dbo.Department
    DROP COLUMN TempColumn;

B. Přidání sloupců období pomocí příznaku HIDDEN

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

Pomocí ALTER COLUMN <period_column> DROP HIDDEN můžete vymazat skrytý příznak ve sloupci období.

C. Změna schématu s SYSTEM_VERSIONING nastavenou na VYPNUTO

Následující příklad ukazuje, jak změnit schéma, když je stále potřeba nastavit SYSTEM_VERSIONING = OFF (přidat sloupec IDENTITY ). Tento příklad zakáže kontrolu konzistence dat. Tato kontrola není nutná, pokud provedete změnu schématu v rámci transakce, protože nemohou nastat žádné současné změny dat.

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
        CONSTRAINT DF_Cntr DEFAULT 0 NOT NULL;

ALTER TABLE [dbo].[CompanyLocation]
SET (
    SYSTEM_VERSIONING = ON
    (HISTORY_TABLE = [dbo].[CompanyLocationHistory])
);

COMMIT TRANSACTION;