Megosztás a következőn keresztül:


Rendszerverziójú temporális tábla sémájának módosítása

Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziók Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

A ALTER TABLE utasítással oszlopokat vehet fel, módosíthat vagy távolíthat el.

Remarks

CONTROL jelenlegi és előzménytáblákra vonatkozó engedély szükséges az időbeli tábla sémájának módosításához.

Egy ALTER TABLE művelet során a rendszer sémazárolást tart mindkét táblán.

A megadott sémamódosítást a rendszer megfelelően propagálja az előzménytáblába (a változás típusától függően).

XML- vagy ALAPÉRTELMEZETT értékekkel rendelkező varchar(max), nvarchar(max)és varbinary(max) oszlopok hozzáadása az SQL Server összes kiadásának adatmódosítási művelete.

Ha az oszlop hozzáadása után a sorméret túllépi a sorméret korlátját, az új oszlopok nem vehetők fel online.

Miután kiterjesztett egy táblát egy új NOT NULL oszlopgal, érdemes lehet elvetni az alapértelmezett korlátozást az előzménytáblán, mivel a rendszer automatikusan kitölti a tábla összes oszlopát.

Az online beállítás (WITH (ONLINE = ON) nincs hatással a ALTER TABLE ALTER COLUMN időbeli tábláira. ALTER oszlop nem online állapotban történik, függetlenül attól, hogy melyik érték lett megadva ONLINE beállításhoz.

A ALTER COLUMN használatával módosíthatja az időszakoszlopok IsHidden tulajdonságát.

A következő sémamódosításokhoz nem használhatja a direkt ALTER-t. Az ilyen típusú módosításokhoz állítsa be a SYSTEM_VERSIONING = OFF.

  • Számított oszlop hozzáadása
  • IDENTITY oszlop hozzáadása
  • SPARSE oszlop hozzáadása vagy egy meglévő oszlop módosítása SPARSE jelölésűre, amikor az előzménytáblázat DATA_COMPRESSION = PAGE vagy DATA_COMPRESSION = ROWértékre van állítva, ami az előzménytáblázat alapértelmezett beállítása.
  • COLUMN_SET hozzáadása
  • ROWGUIDCOL oszlop hozzáadása vagy a meglévő oszlop ROWGUIDCOL-re módosítása
  • NULL oszlop módosítása NOT NULL, ha az oszlop null értékeket tartalmaz az aktuális vagy az előzménytáblában

Examples

A. Temporális tábla sémájának módosítása

Íme néhány példa a temporális tábla sémájának módosítására.

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. Időszak-oszlopok hozzáadása a HIDDEN jelölővel

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

A ALTER COLUMN <period_column> DROP HIDDEN használatával törölheti a rejtett jelzőt egy pontoszlopon.

C. A séma módosítása a SYSTEM_VERSIONING funkció kikapcsolásával

Az alábbi példa bemutatja a séma módosítását, ahol a SYSTEM_VERSIONING = OFF beállítása továbbra is kötelező (IDENTITY oszlop hozzáadása). Ez a példa letiltja az adatkonzisztencia-ellenőrzést. Ez az ellenőrzés szükségtelen, ha a séma módosítása egy tranzakción belül történik, mivel nem fordulhat elő egyidejű adatmódosítás.

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;