Alterar o esquema de uma tabela temporal com controle de versão de sistema
Aplica-se a: SQL Server 2016 (13.x) e posterior Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Use a instrução ALTER TABLE
para adicionar, alterar ou remover uma coluna.
Comentários
A permissão CONTROL
nas tabelas atual e de histórico é necessária para alterar o esquema da tabela temporal.
Durante uma operação ALTER TABLE
, o sistema mantém um bloqueio de esquema em ambas as tabelas.
A alteração de esquema especificada é propagada para a tabela de histórico de forma apropriada (dependendo do tipo de alteração).
A adição de colunas varchar(max), nvarchar(max), varbinary(max) ou XML com valores padrão é uma operação de atualização de dados em todas as edições do SQL Server.
Quando o tamanho da linha após a adição da coluna excede o limite de tamanho de linha, não é possível adicionar novas colunas online.
Quando você estender uma tabela com uma nova coluna NOT NULL
, considere descartar a restrição padrão na tabela de histórico, já que o sistema preenche automaticamente todas as colunas dessa tabela.
A opção online (WITH (ONLINE = ON
) não tem nenhum efeito em ALTER TABLE ALTER COLUMN
em tabelas temporais. A coluna ALTER
não é executada online, independentemente de qual valor foi especificado para a opção ONLINE
.
Não é possível usar ALTER COLUMN
para alterar a propriedade IsHidden
de colunas de período.
Não é possível usar ALTER
direto para as alterações de esquema a seguir. Para esses tipos de alterações, defina SYSTEM_VERSIONING = OFF
.
- Adicionando uma coluna computada
- Adicionando uma coluna
IDENTITY
- A adição de uma coluna
SPARSE
ou a alteração de uma coluna existente para serSPARSE
quando a tabela de histórico é definida comoDATA_COMPRESSION = PAGE
ouDATA_COMPRESSION = ROW
, que é o padrão da tabela de histórico. - Adicionando um
COLUMN_SET
- Adicionando uma coluna
ROWGUIDCOL
ou alterando a coluna existente paraROWGUIDCOL
- Alterando uma coluna
NULL
paraNOT NULL
se a coluna contiver valores nulos na tabela atual ou de histórico
Exemplos
R. Alterar o esquema de uma tabela temporal
Aqui estão alguns exemplos que alteram o esquema de tabela temporal.
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. Adicionar colunas de período usando o sinalizador HIDDEN
ALTER TABLE dbo.Department
ALTER COLUMN ValidFrom ADD HIDDEN;
ALTER TABLE dbo.Department
ALTER COLUMN ValidTo ADD HIDDEN;
É possível usar ALTER COLUMN <period_column> DROP HIDDEN
para limpar o sinalizador oculto em uma coluna de período.
C. Alterar o esquema com SYSTEM_VERSIONING definido como OFF
O exemplo a seguir demonstra como alterar o esquema no qual a configuração SYSTEM_VERSIONING = OFF
ainda é necessária (adicionando a coluna IDENTITY
). Este exemplo desabilita a verificação de consistência de dados. Essa verificação é desnecessária quando a alteração de esquema é feita dentro de uma transação, uma vez que nenhuma alteração de dados simultânea pode ocorrer.
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;
Conteúdo relacionado
- Tabelas temporais
- Introdução a tabelas temporais com controle de versão do sistema
- Gerenciar a retenção de dados históricos em tabelas temporárias com versão do sistema
- Tabelas temporais com controle de versão do sistema e tabelas com otimização de memória
- ALTER TABLE (Transact-SQL)
- Criar uma tabela temporal com controle de versão pelo sistema
- Modificar dados em uma tabela temporal com controle de versão de sistema
- Consultar dados em uma tabela temporal com controle da versão do sistema
- Parar o controle de versão de sistema em uma tabela temporal com controle de versão de sistema