使用記憶體最佳化的系統版本設定時態表

適用於:SQL Server 2016 (13.x) 和更新版本Azure SQL 受控執行個體

本文說明使用記憶體優化系統版本時空表與磁碟系統版本時空表的差異。

Note

記憶體優化時態表僅適用於 SQL Server 和 Azure SQL 受控實例。 記憶體優化數據表和時態表可在 Azure SQL Database 中獨立使用。

探索中繼資料

要發現記憶體優化系統版本時空表的元資料,請結合 sys.tablessys.internal_tables 的資訊。 系統版本化的時間表會作為 parent_object_id 內部記憶體歷史表的欄位出現。

以下範例示範如何查詢及聯結這些資料表。

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;

修改資料

你可以透過原生編譯的儲存程序修改記憶體優化的時間表。 這些程序讓你能轉換非時間記憶體優化的資料表,並保留現有的原生儲存程序。

此範例展示了如何在原生編譯模組中修改現有資料表。

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;