Partilhar via


Criar uma tabela temporal com versão do sistema otimizada para memória

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Instância Gerenciada SQL do Azure

Semelhante à criação de uma tabela de histórico baseada em disco, você pode criar uma tabela temporal otimizada para memória de várias maneiras.

Para criar tabelas com otimização de memória, você deve primeiro criar o grupo de arquivos com otimização de memória.

Observação

As tabelas temporais com otimização de memória só estão disponíveis no SQL Server e na Instância Gerenciada SQL do Azure. Tabelas com otimização de memória e tabelas temporais estão disponíveis independentemente no Banco de Dados SQL do Azure.

Criar uma tabela temporal com otimização de memória com tabela de histórico padrão

Criar uma tabela temporal com uma tabela de histórico padrão é uma opção conveniente quando você deseja controlar a nomenclatura e ainda confiar no sistema para criar uma tabela de histórico com configuração padrão. No exemplo a seguir, uma nova tabela temporal otimizada para memória e com versão do sistema é vinculada a uma nova tabela de histórico baseada em disco.

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)
);

Criar uma tabela temporal com otimização de memória com uma tabela de histórico existente

Você pode criar uma tabela temporal vinculada a uma tabela de histórico existente quando desejar adicionar controle de versão do sistema usando uma tabela existente. Esse cenário é útil quando você deseja migrar uma solução temporal personalizada para o suporte interno. No exemplo a seguir, uma nova tabela temporal é criada vinculada a uma tabela de histórico existente.

--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
);