適用対象:AZURE SQL
Managed Instance SQL Server 2016 (13.x) 以降のバージョン
この記事では、メモリ最適化されたシステムバージョン付き時間テーブルの作業と、ディスクベースのシステムバージョン付き時間テーブルの作業がどのように異なるかを説明します。
Note
メモリ最適化テンポラル テーブルは、SQL Server と Azure SQL Managed Instance でのみ使用できます。 メモリ最適化テーブルとテンポラル テーブルは、Azure SQL Database で個別に使用できます。
メタデータを検出する
メモリ最適化されたシステムバージョン対応の時間テーブルのメタデータを発見するには、 sys.tables と sys.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;