Lavorare con tabelle temporali con versionamento di sistema e ottimizzate per la memoria

Si applica a: SQL Server 2016 (13.x) e versioni successive di Istanza gestita di SQL di Azure

Questo articolo descrive come lavorare con una tabella temporale di sistema ottimizzata per la memoria differisce dal lavorare con una tabella temporale di sistema basata su disco.

Note

Le tabelle temporali ottimizzate per la memoria sono disponibili solo in SQL Server e in Istanza gestita di SQL di Azure. Le tabelle ottimizzate per la memoria e le tabelle temporali sono disponibili in modo indipendente nel database SQL di Azure.

Scoprire i metadati

Per scoprire i metadati di una tabella temporale ottimizzata per la memoria e versionata per sistema, combina informazioni da sys.tables e sys.internal_tables. Una tabella temporale versionata al sistema appare come parent_object_id colonna della tabella della cronologia interna in memoria.

Questo esempio mostra come eseguire una query ed effettuare un join di queste tabelle.

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;

Modificare i dati

Puoi modificare tabelle temporali ottimizzate per la memoria tramite stored procedure compilate nativamente. Queste procedure permettono di convertire tabelle ottimizzate per la memoria non temporale e di mantenere le procedure esistenti memorizzate nativamente.

Questo esempio mostra come modificare una tabella esistente in un modulo compilato nativamente.

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;