Alterar o esquema de uma tabela temporal com controle de versão do sistema

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Banco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

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

Exemplos

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.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 ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

Observações importantes

  • PermissãoCONTROL nas tabelas atual e de histórico é necessária para alterar o esquema da tabela temporal.

  • Durante uma ALTER TABLE operação, 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 será uma operação de atualização de dados em todas as edições do SQL Server.

  • Se o tamanho da linha após a adição da coluna exceder o limite de tamanho da linha, novas colunas não poderão ser adicionadas 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 todas as colunas dessa tabela são preenchidas automaticamente pelo sistema.

  • A opção online (WITH (ONLINE = ON) não tem nenhum efeito sobre ALTER TABLE ALTER COLUMN as tabelas temporais com controle de versão do sistema. A coluna ALTER não é executada como online, independentemente do valor especificado para a opção ONLINE.

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

  • Você não pode usar direct ALTER 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
    • Adicionar uma coluna SPARSE ou alterar a coluna existente para ser SPARSE quando a tabela de histórico for definida DATA_COMPRESSION = PAGE como ou DATA_COMPRESSION = ROW, que é o padrão para a tabela de histórico.
    • Adicionando um COLUMN_SET
    • Adicionando uma coluna ROWGUIDCOL ou alterando a coluna existente para ROWGUIDCOL
    • Alterando uma coluna NULL para NOT NULL se a coluna contiver valores nulos na tabela atual ou de histórico

O exemplo a seguir demonstra como alterar o esquema em que a configuração SYSTEM_VERSIONING = OFF ainda é necessária (adicionando uma 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;

Próximas etapas