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


Изменение структуры системно-версионированной темпоральной таблицы

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

Используйте инструкцию ALTER TABLE для добавления, изменения или удаления столбца.

Замечания

CONTROL Разрешение на текущие и исторические таблицы требуется для изменения схемы временной таблицы.

Во время ALTER TABLE операции система держит блокировку схемы на обеих таблицах.

Указанные изменения схемы надлежащим образом распространяются на таблицу истории в зависимости от типа изменений.

Добавление varchar(max), nvarchar(max), varbinary(max) или XML-столбцов со значениями по умолчанию является операцией обновления данных во всех редакциях SQL Server.

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

После расширения таблицы с новым NOT NULL столбцом рекомендуется удалить ограничение по умолчанию в таблице журнала, так как система автоматически заполняет все столбцы в этой таблице.

Параметр online (WITH (ONLINE = ON) не влияет на темпоральные таблицы ALTER TABLE ALTER COLUMN. ALTER столбец не работает в режиме онлайн, независимо от того, какое значение было указано для параметра ONLINE.

Можно использовать ALTER COLUMN для изменения IsHidden свойства для столбцов периодов.

Вы не можете использовать прямой ALTER для следующих изменений схемы. Для этих типов изменений задайте SYSTEM_VERSIONING = OFF.

  • добавление вычисляемого столбца;
  • Добавление столбца IDENTITY
  • Добавление столбца SPARSE или изменение существующего столбца на SPARSE, когда таблица журнала установлена на DATA_COMPRESSION = PAGE или DATA_COMPRESSION = ROW, что является значением по умолчанию для таблицы журнала.
  • Добавление COLUMN_SET
  • Добавление столбца ROWGUIDCOL или изменение существующего столбца на ROWGUIDCOL
  • Изменение столбца NULL на NOT NULL, если столбец содержит значения NULL в текущей или исторической таблице.

Примеры

А. Изменение схемы темпоральной таблицы

Ниже приведены примеры изменения схемы темпоральной таблицы.

ALTER TABLE dbo.Department
    ALTER COLUMN DeptName varchar(100);

ALTER TABLE dbo.Department
    ADD WebAddress nvarchar(255) NOT NULL
    CONSTRAINT DF_WebAddress DEFAULT 'www.example.com';

ALTER TABLE dbo.Department
    ADD TempColumn INT;
GO

ALTER TABLE dbo.Department
    DROP COLUMN TempColumn;

B. Добавьте столбцы периодов, используя флаг HIDDEN

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

Можно использовать ALTER COLUMN <period_column> DROP HIDDEN для очистки скрытого флага в столбце периода.

В. Измените схему с параметром SYSTEM_VERSIONING set to OFF

В следующем примере показано изменение схемы, в которой по-прежнему требуется параметр SYSTEM_VERSIONING = OFF (добавление столбца IDENTITY ). В этом примере отключена проверка согласованности данных. Эта проверка не требуется, если изменения схемы выполнены в рамках транзакции, так как в течение этого периода не могут произойти другие изменения данных.

BEGIN TRANSACTION

ALTER TABLE [dbo].[CompanyLocation] SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE [CompanyLocation] ADD Cntr INT IDENTITY (1, 1);

ALTER TABLE [dbo].[CompanyLocationHistory]
    ADD Cntr INT NOT NULL
    CONSTRAINT DF_Cntr DEFAULT 0;

ALTER TABLE [dbo].[CompanyLocation] SET
(
    SYSTEM_VERSIONING = ON
    (HISTORY_TABLE = [dbo].[CompanyLocationHistory])
);

COMMIT;