Изменение схемы темпоральной таблицы с системным управлением версиямиChanging the schema of a system-versioned temporal table

Применимо к:Applies to: даSQL Server 2016 (13.x);SQL Server 2016 (13.x)yesSQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздние версии ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed InstanceПрименимо к:Applies to: даSQL Server 2016 (13.x);SQL Server 2016 (13.x)yesSQL Server 2016 (13.x);SQL Server 2016 (13.x) and later ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance

В этом разделе описывается использование инструкции ALTER TABLE , чтобы добавить, изменить или удалить столбец.Use the ALTER TABLE statement to add, alter or remove a column.

ПримерыExamples

Ниже приведены примеры изменения схемы темпоральной таблицы.Here are some examples that change the schema of temporal 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 SysStartTime ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN SysEndTime ADD HIDDEN;

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

  • Чтобы изменить схему темпоральной таблицы, требуется разрешениеCONTROL на текущую и прежнюю таблицы.CONTROL permission on current and history tables is required to change schema of temporal table.

  • Во время выполнения операции ALTER TABLE схема обеих таблиц блокируется системой.During an ALTER TABLE operation, the system holds a schema lock on both tables.

  • Указанные изменения схемы распространяются на прежнюю таблицу соответствующим образом (в зависимости от типа изменений).Specified schema change is propagated to history table appropriately (depending on type of change).

  • Чтобы добавить столбец, который не допускает значений NULL, или изменить существующий столбец, который допускает значения NULL, необходимо указать значение по умолчанию для существующих строк.If you add a non-nullable column or alter existing column to become non-nullable, you must specify the default value for existing rows. Система создаст дополнительное значение по умолчанию с таким же значением и применит его к прежним таблицам.The system will generate an additional default with the same value and apply it to the history table. Добавление DEFAULT в непустую таблицу — это операция, связанная с размером данных. Она предоставляется во всех выпусках SQL ServerSQL Server , кроме Enterprise Edition (в этом выпуске это операция с метаданными).Adding DEFAULT to a non-empty table is a size of data operation on all editions other than SQL ServerSQL Server Enterprise Edition (on which it is a metadata operation).

  • Добавление столбцов varchar(max), nvarchar(max), varbinary(max) или XML со значениями по умолчанию — это операция обновления данных, которая будет доступна во всех выпусках SQL ServerSQL Server.Adding varchar(max), nvarchar(max), varbinary(max) or XML columns with defaults will be an update data operation on all editions of SQL ServerSQL Server.

  • Новый столбец нельзя добавить в сети, если после добавления будет превышено ограничение размера строки.If row size after column addition exceeds the row size limit, new columns cannot be added online.

  • После добавления в таблицу нового столбца, который не допускает значений NULL, следует отключить ограничение по умолчанию в прежней таблице, так как система автоматически заполняет ее новыми столбцами.Once you extend a table with a new NOT NULL column, consider dropping default constraint on the history table as all columns in that table are automatically populated by the system.

  • Параметр ONLINE (WITH (ONLINE = ON) не влияет на ALTER TABLE ALTER COLUMN при использовании темпоральной таблицы с системным управлением версиями.Online option (WITH (ONLINE = ON) has no effect on ALTER TABLE ALTER COLUMN in case of system-versioned temporal table. Столбец ALTER не выполняется в оперативном режиме независимо от того, какое значение указано для параметра ONLINE.ALTER column is not performed as online regardless of which value was specified for ONLINE option.

  • Свойство IsHidden для столбцов периода можно изменить с помощью инструкции ALTER COLUMN .You can use ALTER COLUMN to change IsHidden property for period columns.

  • Прямую инструкцию ALTER нельзя использовать для следующих изменений схемыYou cannot use direct ALTER for the following schema changes. Для таких типов изменений установите SYSTEM_VERSIONING = OFF.For these types of changes, set SYSTEM_VERSIONING = OFF.

    • добавление вычисляемого столбца;Adding a computed column
    • добавление столбца IDENTITY ;Adding an IDENTITY column
    • добавление столбца SPARSE или изменение существующего столбца на SPARSE, если для прежней таблицы заданы значения по умолчанию DATA_COMPRESSION = PAGE или DATA_COMPRESSION = ROW;Adding a SPARSE column or changing existing column to be SPARSEwhen the history table is set to DATA_COMPRESSION = PAGE or DATA_COMPRESSION = ROW, which is the default for the history table.
    • добавление столбца COLUMN_SET;Adding a COLUMN_SET
    • добавление столбца ROWGUIDCOL или изменение существующего столбца на ROWGUIDCOL.Adding a ROWGUIDCOL column or changing existing column to be ROWGUIDCOL

В примере ниже показано изменение схемы, для которой требуется параметр SYSTEM_VERSIONING = OFF (добавление столбца IDENTITY ).The following example demonstrates changing the schema where setting SYSTEM_VERSIONING = OFF is still required (adding IDENTITY column). В этом примере отключена проверка согласованности данных.This example disables the data consistency check. Эта проверка не требуется, если изменения схемы выполнены в рамках транзакции, так как в течение этого периода не могут произойти другие изменения данных.This check is unnecessary when the schema change is made within a transaction as no concurrent data changes can occur.

    BEGIN TRAN
        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 DEFAULT 0;
        ALTER TABLE [dbo].[CompanyLocation]
    SET
         (
            SYSTEM_VERSIONING = ON
           ( HISTORY_TABLE = [dbo].[CompanyLocationHistory])
         );
    COMMIT ;

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