分享方式:


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

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

本文討論記憶體最佳化之系統版本設定時態表和以磁碟為基礎之系統版本設定時態表的使用方式差異。

注意

記憶體最佳化時態表只能在 SQL Server (而不是 Azure SQL 資料庫) 中使用。

探索中繼資料

若要探索記憶體最佳化之系統版本設定時態表的相關中繼資料,您需要結合來自 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 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;

修改資料

原生編譯的預存程序可讓您轉換非記憶體最佳化的時態表,並保留現有的原生預存程序,因此您可以透過這些預存程序來修改記憶體最佳化時態表。

以下範例展示如何在原生編譯的模組中修改先前建立的資料表。

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;