メモリ最適化およびシステム バージョン管理されたテンポラル テーブルを操作する
適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Database Azure SQL Managed Instance
この記事では、メモリ最適化およびシステム バージョン管理されたテンポラル テーブルと、ディスク ベースのシステム バージョン管理されたテンポラル テーブルの違いについて説明します。
Note
メモリ最適化テンポラル テーブルは SQL Server でのみ使用でき、Azure SQL データベースでは使用できません。
メタデータを検出する
メモリ最適化およびシステム バージョン管理されたテンポラル テーブルに関するメタデータを検索するには、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 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;