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

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

本文介绍了使用内存优化的系统版本控制时态表与使用基于磁盘的系统版本控制时态表有何不同。

注意

内存优化时态表只在 SQL Server 中可用,在 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 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;