Создание оптимизированной для памяти темпоральной таблицы с системным управлением версиями

Применимо к: SQL Server 2016 (13.x) и более поздних версий Azure SQL Database Управляемый экземпляр SQL Azure

Подобно созданию таблицы журнала на диске, можно создать темпоральную таблицу, оптимизированную для памяти, несколькими способами.

Примечание

Для создания оптимизированных для памяти таблиц необходимо сначала создать файловую группу с оптимизированной памятью.

Темпоральная таблица с таблицей журнала по умолчанию удобна в тех случаях, когда вы хотите контролировать именование, но при этом автоматически создать таблицу журнала с конфигурацией по умолчанию. В приведенном ниже примере новая оптимизированная для памяти темпоральная таблица с системным управлением версиями связывается с новой таблицей журнала на диске.

CREATE SCHEMA History
GO
CREATE TABLE dbo.Department
   (  
      DepartmentNumber char(10) NOT NULL PRIMARY KEY NONCLUSTERED,
      DepartmentName varchar(50) NOT NULL,
      ManagerID int NULL,
      ParentDepartmentNumber char(10) NULL,
      ValidFrom datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
      ValidTo datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
      PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
   )
WITH
   (
       MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA,
          SYSTEM_VERSIONING = ON ( HISTORY_TABLE = History.DepartmentHistory )
    );

Создание темпоральной таблицы, связанной с существующей таблицей журнала, полезно, если вам нужно добавить системное управление версиями с использованием существующей таблицы, например, если требуется перенести пользовательское темпоральное решение в решение со встроенной поддержкой. В приведенном ниже примере создается новая темпоральная таблица, связанная с существующей таблицей журнала.

--Existing table
CREATE TABLE Department_History
   (
      DepartmentNumber char(10) NOT NULL,
      DepartmentName varchar(50) NOT NULL,
      ManagerID int NULL,
      ParentDepartmentNumber char(10) NULL,
      ValidFrom datetime2 NOT NULL, ValidTo datetime2 NOT NULL
   )
;
--Temporal table
CREATE TABLE Department
   (
      DepartmentNumber char(10) NOT NULL PRIMARY KEY NONCLUSTERED,
      DepartmentName varchar(50) NOT NULL,
      ManagerID INT NULL,
      ParentDepartmentNumber char(10) NULL,
      ValidFrom datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
      ValidTo datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
      PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
   )
WITH
   (
      SYSTEM_VERSIONING = ON
         (  
            HISTORY_TABLE = dbo.Department_History
            , DATA_CONSISTENCY_CHECK = ON
         )  
      , MEMORY_OPTIMIZED = ON
      , DURABILITY = SCHEMA_AND_DATA
   )
;

См.