Работа с оптимизированными для памяти темпоральными таблицами с системным управлением версиямиWorking with Memory-Optimized System-Versioned Temporal Tables

Применимо к:Applies to: даSQL Server 2016 (13.x);SQL Server 2016 (13.x)yesSQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздние версии ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed InstanceПрименимо к:Applies to: даSQL Server 2016 (13.x);SQL Server 2016 (13.x)yesSQL Server 2016 (13.x);SQL Server 2016 (13.x) and later ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance

В этом разделе обсуждается, как работа с оптимизированной для памяти темпоральной таблицей с системным управлением версиями отличается от работы с дисковой темпоральной таблицей с системным управлением версиями.This topic discusses how working with a memory-optimized system-versioned temporal table is different from working with a disk-based system-versioned temporal table.

Примечание

Использование Temporal с оптимизированными для памяти таблицами применяется только к SQL Server 2019 (15.x)SQL Server 2019 (15.x) и не относится к База данных SQLSQL Database.Using Temporal with memory optimized tables only applies to SQL Server 2019 (15.x)SQL Server 2019 (15.x) and does not apply to База данных SQLSQL Database.

Обнаружение метаданныхDiscovering Metadata

Для обнаружения метаданных об оптимизированной для памяти темпоральной таблице с системным управлением версиями необходимо объединить информацию из разделов sys.tables (Transact-SQL) и sys.internal_tables (Transact-SQL).To discover metadata about a memory-optimized system-versioned temporal table, you need to combine information from sys.tables (Transact-SQL) and sys.internal_tables (Transact-SQL). Темпоральная таблица с системным управлением версиями представляется в виде parent_object_id внутренней таблицы журнала в памяти.A system-versioned temporal table is presented as parent_object_id of the internal in-memory history table

В этом примере показано, как выполнить запрос к этим таблицам и их соединение.This example shows how to query and join these tables.

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

Изменение данныхModifying Data

Оптимизированные для памяти темпоральные таблицы с системным управлением версиями можно изменять посредством хранимых процедур, скомпилированных в собственном коде. Это позволяет преобразовывать нетемпоральные оптимизированные для памяти таблицы в таблицы с системным управлением версиями и сохранять при этом существующие собственные хранимые процедуры.System-versioned memory-optimized temporal tables can be modified through natively compiled stored procedures, which enables you to convert non-temporal memory-optimized tables to system-versioning and keep existing natively stored procedures.

В этом примере показано, как можно изменить ранее созданную таблицу в модуле, скомпилированном в собственном коде.This example how previously created table can be modified in natively compiled module.

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 ;

См. также:See Also