Sdílet prostřednictvím


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

CONTROL oprávnění k aktuálním tabulkám a tabulkám historie se vyžaduje ke změně schématu dočasné tabulky.

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

Zadaná změna schématu se odpovídajícím způsobem rozšíří do tabulky historie (v závislosti na typu změny).

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

Pokud velikost řádku po přidání sloupce překročí limit velikosti řádku, není možné přidat nové sloupce online.

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. ALTER sloupec nefunguje jako online bez ohledu na to, jaká hodnota byla zadána 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, pokud je tabulka historie nastavena na DATA_COMPRESSION = PAGE nebo DATA_COMPRESSION = ROW, což je výchozí možnost pro tabulku 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

Tady je několik příkladů, které mění schéma dočasné tabulky.

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. 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 změnu schématu, ve kterém je stále vyžadováno nastavení SYSTEM_VERSIONING = OFF (přidání sloupce IDENTITY). Tento příklad zakáže kontrolu konzistence dat. Tato kontrola není nutná, pokud je změna schématu provedena v rámci transakce, protože nedochází k žádným souběžným změnám 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 NOT NULL
    CONSTRAINT DF_Cntr DEFAULT 0;

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

COMMIT;