Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Относится к: SQL Server 2016 (13.x) и более поздние версии
База данных SQL Azure
Управляемый экземпляр SQL Azure
SQL Database в Microsoft Fabric
Используйте инструкцию ALTER TABLE для добавления, изменения или удаления столбца.
Remarks
Для изменения схемы временной таблицы нужно 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 - Изменение столбца
NULLнаNOT NULL, если столбец содержит значения NULL в текущей или исторической таблице.
Examples
А. Изменение схемы темпоральной таблицы
Вот несколько примеров, которые изменяют схему временной таблицы.
ALTER TABLE dbo.Department
ALTER COLUMN DeptName VARCHAR (100);
ALTER TABLE dbo.Department
ADD WebAddress NVARCHAR (255)
CONSTRAINT DF_WebAddress DEFAULT 'www.example.com' NOT NULL;
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
CONSTRAINT DF_Cntr DEFAULT 0 NOT NULL;
ALTER TABLE [dbo].[CompanyLocation]
SET (
SYSTEM_VERSIONING = ON
(HISTORY_TABLE = [dbo].[CompanyLocationHistory])
);
COMMIT TRANSACTION;
Связанные материалы
- Темпоральные таблицы
- Приступите к изучению системных версионных темпоральных таблиц
- Управление хранением исторических данных в системных темпоральных таблицах
- Системно-версионированные темпоральные таблицы с таблицами, оптимизированными для памяти
- ALTER TABLE (Transact-SQL)
- Создание системной темпоральной таблицы
- Изменение данных в системной темпоральной таблице
- Запрос данных в системной темпоральной таблице
- Остановка системного версионирования в системной темпоральной таблице