Trabajar con tablas temporales con control de versiones del sistema optimizadas para memoria

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Azure SQL Managed Instance

Este artículo describe cómo difiere trabajar con una tabla temporal versionada por sistema optimizada para memoria respecto a trabajar con una tabla temporal versionada por sistema basada en disco.

Note

Las tablas temporales optimizadas para memoria solo están disponibles en SQL Server y Azure SQL Managed Instance. Las tablas y tablas temporales optimizadas para memoria están disponibles de forma independiente en Azure SQL Database.

Detección de metadatos

Para descubrir metadatos sobre una tabla temporal versionada para sistemas optimizada para memoria, combina información de sys.tables y sys.internal_tables. Una tabla temporal con control de versiones del sistema aparece como la columna parent_object_id de la tabla de historial interna en memoria.

En este ejemplo se muestra cómo consultar y combinar estas tablas.

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;

Modificación de datos

Puedes modificar tablas temporales optimizadas para memoria mediante procedimientos almacenados compilados de forma nativa. Estos procedimientos permiten convertir tablas no optimizadas para memoria temporal y conservar los procedimientos nativos existentes.

Este ejemplo muestra cómo modificar una tabla existente en un 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;