使用内存优化的系统版本控制时态表

适用于: SQL Server 2016 (13.x) 及更高版本 Azure SQL 托管实例

本文描述了使用内存优化的系统版本化时间表与使用基于磁盘的系统版本化时间表的区别。

注释

内存优化临时表仅在 SQL Server 和 Azure SQL 托管实例中可用。 内存优化表和临时表在 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 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;