Trabalho com tabelas temporais com controle da versão do sistema com otimização de memória

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

Este tópico discute como o trabalho com uma tabela temporal com controle da versão do sistema com otimização de memória é diferente do trabalho com uma tabela temporal com versão do sistema baseada em disco.

Observação

O uso de tabelas temporais com otimização de memória só se aplica ao SQL Server, não ao Banco de Dados SQL.

Descoberta de Metadados

Para descobrir os metadados referentes a uma tabela temporal com controle de versão do sistema e otimização de memória, você precisa combinar as informações de sys.tables (Transact-SQL) e sys.internal_tables (Transact-SQL). Uma tabela temporal com controle da versão do sistema é apresentada como parent_object_id da tabela de histórico na memória interna

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 IT
JOIN sys.tables T1
    ON IT.parent_object_id = T1.object_id
JOIN sys.tables T2
    ON T1.history_table_id = T2.object_id
WHERE T1.is_memory_optimized = 1 AND T1.temporal_type = 2

Modificando dados

As tabelas temporais com controle da versão do sistema com otimização de memória podem ser modificadas por meio de procedimentos armazenados compilados nativamente que permitem converter tabelas não temporais com otimização de memória para versão do sistema e manter procedimentos existentes armazenados nativamente.

Este exemplo mostra como uma tabela criada anteriormente pode ser modificada no 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
GO ;

Consulte Também