Trabalhar com tabelas temporais otimizadas para memória versionadas pelo sistema

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Instância Gerenciada SQL do Azure

Este artigo descreve como trabalhar com uma tabela temporal de sistema otimizada para memória difere de trabalhar com uma tabela temporal de sistema baseada em disco.

Note

As tabelas temporais com otimização de memória só estão disponíveis no SQL Server e na Instância Gerenciada SQL do Azure. Tabelas com otimização de memória e tabelas temporais estão disponíveis independentemente no Banco de Dados SQL do Azure.

Descobrir metadados

Para descobrir metadados sobre uma tabela temporal otimizada para a memória e versão do sistema, combine informações do sys.tables e sys.internal_tables. Uma tabela temporal com versão controlada pelo sistema aparece na coluna parent_object_id da tabela de histórico interna em memória.

Este exemplo mostra como consultar e unir essas tabelas.

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;

Modificar dados

Pode modificar tabelas temporais otimizadas para memória através de procedimentos armazenados compilados nativamente. Estes procedimentos permitem-lhe converter tabelas não otimizadas para memória temporal e manter procedimentos nativos já existentes.

Este exemplo mostra como modificar uma tabela existente num módulo compilado 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;