Bekerja dengan tabel temporal versi sistem yang dioptimalkan untuk memori

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru Azure SQL Managed Instance

Artikel ini menjelaskan bagaimana bekerja dengan tabel temporal berversi sistem yang dioptimalkan untuk memori berbeda dari bekerja dengan tabel temporal berversi sistem berbasis disk.

Note

Tabel temporal yang dioptimalkan memori hanya tersedia di SQL Server dan Azure SQL Managed Instance. Tabel yang dioptimalkan memori dan tabel temporal tersedia secara independen di Azure SQL Database.

Temukan metadata

Untuk menemukan metadata tentang tabel temporal berversi sistem yang dioptimalkan untuk memori, gabungkan informasi dari sys.tables dan sys.internal_tables. Tabel temporal berversi sistem muncul di kolom parent_object_id pada tabel riwayat internal dalam memori.

Contoh ini memperlihatkan cara mengkueri dan menggabungkan tabel ini.

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;

Mengubah data

Anda dapat memodifikasi tabel temporal yang dioptimalkan untuk memori melalui prosedur tersimpan yang dikompilasi secara native. Prosedur ini memungkinkan Anda mengonversi tabel yang dioptimalkan untuk memori non-temporal dan mempertahankan prosedur yang disimpan secara native yang ada.

Contoh ini menunjukkan cara memodifikasi tabel yang sudah ada dalam modul yang dikompilasi secara native.

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;