Bagikan melalui


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 membahas cara bekerja dengan tabel temporal versi sistem yang dioptimalkan memori dibandingkan bekerja dengan tabel temporal versi sistem berbasis disk.

Catatan

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 versi sistem yang dioptimalkan memori, Anda perlu menggabungkan informasi dari sys.tables dan sys.internal_tables. Tabel temporal yang memiliki versi sistem diwakili oleh parent_object_id dari tabel riwayat dalam memori internal

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 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;

Mengubah data

Tabel temporal yang dioptimalkan memori dapat dimodifikasi melalui prosedur tersimpan yang dikompilasi secara asli, yang memungkinkan Anda mengonversi tabel yang dioptimalkan memori non-temporal, dan mempertahankan prosedur tersimpan secara asli yang ada.

Contoh ini bagaimana tabel yang dibuat sebelumnya dapat dimodifikasi dalam modul yang dikompilasi secara asli.

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;