Travailler avec les tables temporelles avec versions gérées par le système et à mémoire optimisée

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

Cet article décrit en quoi l’utilisation d’une table temporelle à versionnement système optimisée en mémoire diffère de celle d’une table temporelle à versionnement système sur disque.

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.

Découvrir les métadonnées

Pour découvrir des métadonnées concernant une table temporelle optimisée en mémoire pour le système, combinez les informations issues de sys.tables et sys.internal_tables. Une table temporelle à versionnage par le système correspond à la colonne parent_object_id de la table d’historique interne en mémoire.

Cet exemple indique comment exécuter une requête sur ces tables et joindre ces dernières.

SELECT SCHEMA_NAME(T1.schema_id) AS TemporalTableSchema,
       OBJECT_NAME(IT.parent_object_id) AS TemporalTableName,
       T1.object_id AS TemporalTableObjectId,
       IT.Name AS InternalHistoryStagingName,
       SCHEMA_NAME(T2.schema_id) AS HistoryTableSchema,
       OBJECT_NAME(T1.history_table_id) AS HistoryTableName
FROM sys.internal_tables AS IT
     INNER JOIN sys.tables AS T1
         ON IT.parent_object_id = T1.object_id
     INNER JOIN sys.tables AS T2
         ON T1.history_table_id = T2.object_id
WHERE T1.is_memory_optimized = 1
      AND T1.temporal_type = 2;

Modifier des données

Vous pouvez modifier des tables temporelles optimisées en mémoire via des procédures stockées compilées nativement. Ces procédures permettent de convertir des tables non optimisées en mémoire temporelle et de conserver les procédures existantes stockées nativement.

Cet exemple montre comment modifier une table existante dans un module compilé nativement.

CREATE PROCEDURE dbo.UpdateFXCurrencyPair (
    @ProviderID INT,
    @CurrencyID1 INT,
    @CurrencyID2 INT,
    @BidRate DECIMAL (8, 4),
    @AskRate DECIMAL (8, 4)
)
WITH NATIVE_COMPILATION,
     SCHEMABINDING,
     EXECUTE AS OWNER
AS
BEGIN ATOMIC
WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'English')
    UPDATE dbo.FXCurrencyPairs
        SET AskRate = @AskRate,
            BidRate = @BidRate
    WHERE ProviderID = @ProviderID
          AND CurrencyID1 = @CurrencyID1
          AND CurrencyID2 = @CurrencyID2;
END;