Ändra schemat för en systemversionsbaserad temporal tabell

Gäller för: SQL Server 2016 (13.x) och senare versioner Azure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Använd instruktionen ALTER TABLE för att lägga till, ändra eller ta bort en kolumn.

Remarks

Du behöver CONTROL behörighet på nuvarande och historiktabeller för att ändra schemat för en temporär tabell.

Under en ALTER TABLE åtgärd har systemet ett schemalås på båda tabellerna.

Database Engine vidarebefordrar schemaändringen till historiktabellen, beroende på vilken typ av ändring det är.

Att lägga till varchar(max), nvarchar(max), varbinary(max) eller xml-kolumner med standardinställningar är en uppdateringsoperation för data på alla utgåvor av SQL Server.

Om radstorleken efter att en kolumn lagts till överskrider radstorleksgränsen kan du inte lägga till nya kolumner online.

När du utökar en tabell med en ny NOT NULL kolumn bör du överväga att ta bort standardvillkoret för historiktabellen, eftersom systemet automatiskt fyller i alla kolumner i tabellen.

Onlinealternativet (WITH (ONLINE = ON) har ingen effekt på ALTER TABLE ALTER COLUMN med temporala tabeller. Kolumnoperationen ALTER körs inte online, oavsett vilket värde du anger för alternativet ONLINE .

Du kan använda ALTER COLUMN för att ändra egenskapen IsHidden för periodkolumner.

Du kan inte använda direkt ALTER för följande schemaändringar. För dessa typer av ändringar anger du SYSTEM_VERSIONING = OFF.

  • Lägga till en beräknad kolumn
  • Lägga till en IDENTITY kolumn
  • Att lägga till en SPARSE kolumn eller ändra en befintlig kolumn till att vara SPARSE när historiktabellen sätts till DATA_COMPRESSION = PAGE eller DATA_COMPRESSION = ROW, vilket är standard för historiktabellen.
  • Lägga till en COLUMN_SET
  • Att lägga till en ROWGUIDCOL kolumn eller ändra en befintlig kolumn till att vara ROWGUIDCOL
  • Ändra en NULL kolumn till NOT NULL om kolumnen innehåller null-värden i den aktuella tabellen eller historiktabellen

Examples

A. Ändra schemat för en temporal tabell

Här är några exempel som ändrar schemat för en temporär tabell.

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. Lägg till periodkolumner med hjälp av flaggan HIDDEN

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

Du kan använda ALTER COLUMN <period_column> DROP HIDDEN för att rensa den dolda flaggan i en periodkolumn.

C. Ändra schemat med SYSTEM_VERSIONING inställt på OFF

Följande exempel visar hur man ändrar schemat när man fortfarande behöver sätta SYSTEM_VERSIONING = OFF (genom att lägga till en IDENTITY kolumn). Det här exemplet inaktiverar datakonsekvenskontrollen. Denna kontroll är onödig när du gör schemaändringen inom en transaktion, eftersom inga samtidiga dataändringar kan ske.

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;