Delen via


Werken met systeemversiebeheer en voor geheugen geoptimaliseerde temporele tabellen

van toepassing op: SQL Server 2016 (13.x) en hoger Azure SQL Managed Instance

In dit artikel wordt beschreven hoe werken met een tijdelijke tabel met een systeemversie die is geoptimaliseerd voor geheugen, verschilt van het werken met een tijdelijke tabel met schijfversies.

Notitie

Tijdelijke tabellen die zijn geoptimaliseerd voor geheugen, zijn alleen beschikbaar in SQL Server en Azure SQL Managed Instance. Tabellen en tijdelijke tabellen die zijn geoptimaliseerd voor geheugen, zijn onafhankelijk beschikbaar in Azure SQL Database.

Metagegevens detecteren

Als u metagegevens wilt detecteren over een tijdelijke tabel met systeemversies die zijn geoptimaliseerd voor geheugen, moet u informatie uit sys.tables en sys.internal_tablescombineren. Een tijdelijke tabel met systeemversies wordt weergegeven als parent_object_id van de interne geschiedenistabel in het geheugen

In dit voorbeeld ziet u hoe u query's kunt uitvoeren op deze tabellen en deze tabellen kunt samenvoegen.

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

Gegevens wijzigen

Tijdelijke tabellen die zijn geoptimaliseerd voor geheugen kunnen worden gewijzigd via systeemeigen gecompileerde opgeslagen procedures, waarmee u niet-tijdelijke, door geheugen geoptimaliseerde tabellen kunt converteren en bestaande systeemeigen opgeslagen procedures kunt behouden.

Hoe de eerder gemaakte tabel in dit voorbeeld kan worden gewijzigd in een systeemeigen gecompileerde module.

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;