Alterar o esquema de uma tabela temporal versionada pelo sistema

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Base de Dados SQL do Azure Azure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Use a instrução ALTER TABLE para adicionar, alterar ou remover uma coluna.

Remarks

Precisa da permissão CONTROL nas tabelas atual e de histórico para alterar o esquema de uma tabela temporal.

Durante uma operação ALTER TABLE, o sistema mantém um bloqueio de esquema em ambas as tabelas.

O Database Engine propaga a alteração do esquema para a tabela de histórico, dependendo do tipo de alteração.

A adição de colunas varchar(max), nvarchar(max), varbinary(max) ou xml com valores predefinidos é uma operação de atualização de dados em todas as edições do SQL Server.

Se o tamanho da linha após adicionar uma coluna ultrapassar o limite de tamanho, não pode adicionar novas colunas online.

Depois de estender uma tabela com uma nova coluna NOT NULL, considere descartar a restrição padrão na tabela de histórico, pois o sistema preenche automaticamente todas as colunas dessa tabela.

A opção online (WITH (ONLINE = ON) não tem qualquer efeito sobre ALTER TABLE ALTER COLUMN com tabelas temporais. A operação de coluna ALTER não é executada online, independentemente do valor especificado na opção ONLINE.

Você pode usar ALTER COLUMN para alterar a propriedade IsHidden das colunas de período.

Não é possível usar ALTER direto para as seguintes alterações de esquema. Para esses tipos de alterações, defina SYSTEM_VERSIONING = OFF.

  • Adicionar uma coluna computada
  • Adicionar uma coluna IDENTITY
  • Adicionar uma coluna SPARSE ou alterar uma coluna existente para SPARSE quando a tabela de histórico estiver definida como DATA_COMPRESSION = PAGE ou DATA_COMPRESSION = ROW, que é a predefinição da tabela de histórico.
  • Adicionar um COLUMN_SET
  • Adicionar uma ROWGUIDCOL coluna ou alterar uma coluna existente para ser ROWGUIDCOL
  • Alterar uma coluna NULL para NOT NULL se a coluna contiver valores nulos na tabela atual ou de histórico

Examples

A. Alterar o esquema de uma tabela temporal

Aqui estão alguns exemplos que alteram o esquema de uma tabela temporal.

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. Adicionar colunas de período usando o marcador OCULTO

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

Você pode usar ALTER COLUMN <period_column> DROP HIDDEN para limpar o sinalizador oculto numa coluna de período.

C. Alterar o esquema com SYSTEM_VERSIONING definido como OFF

O exemplo seguinte mostra como alterar o esquema quando ainda é necessário definir SYSTEM_VERSIONING = OFF (adicionar uma IDENTITY coluna). Este exemplo desabilita a verificação de consistência de dados. Esta verificação é desnecessária quando se faz a alteração do esquema dentro de uma transação, porque não podem ocorrer alterações simultâneas nos dados.

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;