Créer une table temporelle versionnée par le système et optimisée en mémoire

S’applique à : SQL Server 2016 (13.x) et versions ultérieures d’Azure SQL Managed Instance

Comme pour la création d'une table d'historique sur disque, vous pouvez créer une table temporelle à mémoire optimisée de plusieurs façons.

Pour créer des tables à mémoire optimisée, vous devez d’abord créer le Groupe de fichiers mémoire optimisé.

Note

Les tables temporelles optimisées en mémoire sont disponibles uniquement dans SQL Server et Azure SQL Managed Instance. Les tables optimisées en mémoire et les tables temporelles sont disponibles indépendamment dans Azure SQL Database.

Créer une table temporelle optimisée en mémoire avec une table d’historique par défaut

Créer une table temporelle avec une table d’historique par défaut est une option pratique quand on veut contrôler la dénomination tout en comptant sur le système pour créer la table d’historique avec une configuration par défaut. Dans l’exemple suivant, une nouvelle table temporelle optimisée pour la mémoire version système est liée à une nouvelle table d’historique basée sur disque.

CREATE SCHEMA History;
GO

CREATE TABLE dbo.Department
(
    DepartmentNumber CHAR (10) NOT NULL PRIMARY KEY NONCLUSTERED,
    DepartmentName VARCHAR (50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (
    SYSTEM_VERSIONING = ON (
        HISTORY_TABLE = dbo.Department_History
    ),
    MEMORY_OPTIMIZED = ON,
    DURABILITY = SCHEMA_AND_DATA
);

Créer une table temporelle optimisée en mémoire à l’aide d’une table d’historique existante

Vous pouvez créer une table temporelle liée à une table d’historique existante lorsque vous souhaitez ajouter un système de versionnement à partir d’une table existante. Ce scénario est utile lorsque vous souhaitez migrer une solution temporelle personnalisée vers la prise en charge intégrée. Dans l’exemple ci-dessous, une table temporelle est créée et liée à une table de l’historique existante.

Tout d’abord, créez le tableau historique existant :

CREATE TABLE Department_History
(
    DepartmentNumber CHAR (10) NOT NULL,
    DepartmentName VARCHAR (50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    ValidFrom DATETIME2 NOT NULL,
    ValidTo DATETIME2 NOT NULL
);

Ensuite, convertir une table temporelle qui fait le lien avec la table d’historique.

CREATE TABLE Department
(
    DepartmentNumber CHAR (10) NOT NULL PRIMARY KEY NONCLUSTERED,
    DepartmentName VARCHAR (50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (
    SYSTEM_VERSIONING = ON (
        HISTORY_TABLE = dbo.Department_History,
        DATA_CONSISTENCY_CHECK = ON
    ),
    MEMORY_OPTIMIZED = ON,
    DURABILITY = SCHEMA_AND_DATA
);