Dela via


Skapa en minnesoptimerad systemversionsbaserad temporal tabell

gäller för: SQL Server 2016 (13.x) och senare Azure SQL Managed Instance

På samma sätt som du skapar en diskbaserad historiktabell kan du skapa en minnesoptimerad tidstabell på flera sätt.

Om du vill skapa minnesoptimerade tabeller måste du först skapa den minnesoptimerade filgruppen.

Obs

Minnesoptimerade temporala tabeller är endast tillgängliga i SQL Server och Azure SQL Managed Instance. Minnesoptimerade tabeller och temporala tabeller är oberoende tillgängliga i Azure SQL Database.

Skapa en minnesoptimerad tidstabell med standardhistoriktabell

Att skapa en temporal tabell med en standardhistoriktabell är ett praktiskt alternativ när du vill styra namngivning och fortfarande förlitar dig på att systemet skapar en historiktabell med standardkonfiguration. I följande exempel är en ny systemversionsbaserad minnesoptimerad tidstabell länkad till en ny diskbaserad historiktabell.

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

Skapa en minnesoptimerad tidstabell med en befintlig historiktabell

Du kan skapa en temporal tabell som är länkad till en befintlig historiktabell när du vill lägga till systemversioner med hjälp av en befintlig tabell. Det här scenariot är användbart när du vill migrera en anpassad temporal lösning till inbyggt stöd. I följande exempel skapas en ny temporal tabell som är länkad till en befintlig historiktabell.

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