Arbeta med minnesoptimerade systemversionsbaserade temporala tabeller

Gäller för: SQL Server 2016 (13.x) och senare versioner Azure SQL Managed Instance

Denna artikel beskriver hur arbete med en minnesoptimerad systemversionerad temporal tabell skiljer sig från att arbeta med en diskbaserad systemversionerad temporal tabell.

Anmärkning

Minnesoptimerade temporala tabeller är endast tillgängliga i SQL Server och Azure SQL Managed Instance. Minnesoptimerade tabeller och temporala tabeller är oberoende tillgängliga i Azure SQL Database.

Upptäck metadata

För att upptäcka metadata om en minnesoptimerad systemversionerad temporal tabell, kombinera information från sys.tables och sys.internal_tables. En systemversionerad tidstabell visas som kolumnen parent_object_id i den interna historiktabellen i minnet.

Det här exemplet visar hur du frågar efter och ansluter till dessa tabeller.

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;

Ändra data

Du kan modifiera minnesoptimerade temporala tabeller genom nativt kompilerade lagrade procedurer. Dessa procedurer låter dig konvertera icke-temporala minnesoptimerade tabeller och behålla befintliga nativt lagrade procedurer.

Detta exempel visar hur man modifierar en befintlig tabell i en nativt kompilerad modul.

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;