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


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

Область применения: SQL Server 2016 (13.x) и более поздних версий База данных SQL Azure Управляемый экземпляр 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, следует отключить ограничение по умолчанию в прежней таблице, так как система автоматически заполняет ее новыми столбцами.

  • Параметр 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 в текущей или таблице журнала

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

Следующие шаги