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

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

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

Примеры

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

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

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

ALTER TABLE dbo.Department
    ADD TempColumn INT;

GO

ALTER TABLE dbo.Department
    DROP COLUMN TempColumn;

/* Setting IsHidden property for period columns.
Use ALTER COLUMN <period_column> DROP HIDDEN to clear IsHidden flag */

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

Важные замечания

  • Чтобы изменить схему темпоральной таблицы, требуется разрешениеCONTROL на текущую и прежнюю таблицы.

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

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

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

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

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

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

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

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

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

В следующем примере показано изменение схемы, где параметр 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;

Дальнейшие действия