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


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

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

Используйте инструкцию 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
  • Изменение столбца в том случае, если столбец NOT NULL содержит значения 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 для очистки скрытого флага в столбце периода.

C. Измените схему с параметром 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;