メモリ最適化およびシステム バージョン管理されたテンポラル テーブルの使用

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL DatabaseAzure SQL Managed Instance

このトピックでは、メモリ最適化およびシステム バージョン管理されたテンポラル テーブルと、ディスク ベースのシステム バージョン管理されたテンポラル テーブルの違いについて説明します。

注意

メモリ最適化されたテンポラル テーブルの使用は SQL Server にのみ適用され、SQL Database には適用されません。

メタデータの検索

メモリ最適化およびシステム バージョン管理されたテンポラル テーブルに関するメタデータを検索するには、sys.tables (Transact-SQL)sys.internal_tables (Transact-SQL) の情報を結合する必要があります。 システム バージョン管理されたテンポラル テーブルは、内部のインメモリ履歴テーブルの 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
JOIN sys.tables T1
    ON IT.parent_object_id = T1.object_id
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 ;

参照