使用带有系统版本的内存优化临时表

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

本主题介绍了使用带有系统版本的内存优化临时表与使用带有系统版本的基于磁盘的临时表有何不同。

注意

内存优化临时表仅适用于 SQL Server,而不适用于 SQL 数据库。

发现元数据

若要发现带有系统版本的内存优化临时表的元数据,你需要合并 sys.tables (Transact-SQL)sys.internal_tables (Transact-SQL) 中的信息。 带有系统版本的临时表会显示为内部内存中历史记录表的 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
JOIN sys.tables T1
    ON IT.parent_object_id = T1.object_id
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 ;

另请参阅