Delen via


Het schema van een systeemtijd-tabel wijzigen

Van toepassing op: SQL Server 2016 (13.x) en latere versies Azure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Gebruik de instructie ALTER TABLE om een kolom toe te voegen, te wijzigen of te verwijderen.

Opmerkingen

CONTROL machtiging voor huidige en geschiedenistabellen is vereist om het schema van de tijdelijke tabel te wijzigen.

Tijdens een ALTER TABLE-bewerking houdt het systeem een schemavergrendeling op beide tabellen.

De opgegeven schemawijziging wordt op de juiste wijze doorgegeven aan de geschiedenistabel (afhankelijk van het type wijziging).

Het toevoegen van varchar(max), nvarchar(max), varbinary(max) of XML-kolommen met standaardinstellingen, is een updategegevensbewerking op alle edities van SQL Server.

Als de rijgrootte na het toevoegen van kolommen de limiet voor rijgrootte overschrijdt, kunnen nieuwe kolommen niet online worden toegevoegd.

Zodra u een tabel met een nieuwe NOT NULL kolom hebt uitgebreid, kunt u overwegen om de standaardbeperking voor de geschiedenistabel te verwijderen, omdat in het systeem automatisch alle kolommen in die tabel worden ingevuld.

De onlineoptie (WITH (ONLINE = ON) heeft geen effect op ALTER TABLE ALTER COLUMN met tijdelijke tabellen. ALTER kolom wordt niet online uitgevoerd, ongeacht welke waarde is opgegeven voor ONLINE optie.

U kunt ALTER COLUMN gebruiken om de eigenschap IsHidden voor periodekolommen te wijzigen.

U kunt geen directe ALTER gebruiken voor de volgende schemawijzigingen. Voor deze typen wijzigingen stelt u SYSTEM_VERSIONING = OFFin.

  • Een berekende kolom toevoegen
  • Een IDENTITY kolom toevoegen
  • Een SPARSE kolom toevoegen of bestaande kolom wijzigen in SPARSE wanneer de geschiedenistabel is ingesteld op DATA_COMPRESSION = PAGE of DATA_COMPRESSION = ROW. Dit is de standaardinstelling voor de geschiedenistabel.
  • Een COLUMN_SET toevoegen
  • Een ROWGUIDCOL kolom toevoegen of bestaande kolom wijzigen zodat deze ROWGUIDCOL
  • Een NULL kolom wijzigen in NOT NULL als de kolom null-waarden bevat in de huidige of geschiedenistabel

Voorbeelden

A. Het schema van een tijdelijke tabel wijzigen

Hier volgen enkele voorbeelden die het schema van de tijdelijke tabel wijzigen.

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. Kolommen voor perioden toevoegen met behulp van de HIDDEN-vlag

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

U kunt ALTER COLUMN <period_column> DROP HIDDEN gebruiken om de verborgen vlag op een periodekolom te wissen.

C. Het schema wijzigen met SYSTEM_VERSIONING ingesteld op UIT

In het volgende voorbeeld ziet u hoe u het schema wijzigt waarin het instellen van SYSTEM_VERSIONING = OFF nog steeds vereist is (het toevoegen van een IDENTITY kolom). In dit voorbeeld wordt de controle van gegevensconsistentie uitgeschakeld. Deze controle is niet nodig wanneer de schemawijziging binnen een transactie wordt aangebracht, omdat er geen gelijktijdige gegevenswijzigingen kunnen optreden.

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;