Поделиться через


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

относится к: SQL Server 2016 (13.x) и более поздним версиям Azure SQL Managed Instance

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

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

Заметка

Оптимизированные для памяти временные таблицы доступны только в SQL Server и Управляемом экземпляре SQL Azure. Оптимизированные для памяти таблицы и темпоральные таблицы доступны независимо в Базе данных 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
);