Изменение схемы системной темпоральной таблицы
Область применения: 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;
Связанный контент
- Темпоральные таблицы
- Начало работы с системными темпоральными таблицами
- Управление хранением исторических данных в системных темпоральных таблицах
- Системные темпоральные таблицы с оптимизированными для памяти таблицами
- Инструкция ALTER TABLE (Transact-SQL)
- Создание системной темпоральной таблицы
- Изменение данных в системной темпоральной таблице
- Запрос данных в системной темпоральной таблице
- Остановка системного управления версиями в системной темпоральной таблице