メモリ最適化されたシステム バージョン管理テンポラル テーブルを使用する

適用対象:AZURE SQL Managed Instance SQL Server 2016 (13.x) 以降のバージョン

この記事では、メモリ最適化されたシステムバージョン付き時間テーブルの作業と、ディスクベースのシステムバージョン付き時間テーブルの作業がどのように異なるかを説明します。

Note

メモリ最適化テンポラル テーブルは、SQL Server と Azure SQL Managed Instance でのみ使用できます。 メモリ最適化テーブルとテンポラル テーブルは、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;