Tabela Temporal no SQL Server – Parte 1: Introdução ao Conceito

O SQL Server 2016 trouxe um recurso muito poderoso para rastreamento de mudanças nos dados: a Tabela Temporal (ou System-Versioned Temporal Table). Ela permite consultar como os dados estavam em um ponto específico do tempo, sem a necessidade de triggers ou versionamento manual.

Se você já precisou responder a perguntas como “quando essa linha mudou?” ou “como era essa tabela no mês passado?”, a Tabela Temporal é a ferramenta certa para você.


🧠 O que é uma Tabela Temporal?

É uma tabela especial que mantém automaticamente um histórico completo das alterações de cada linha, registrando a versão anterior dos dados em uma tabela de histórico associada.

Funciona assim:

  • A tabela principal armazena os dados atuais

  • A tabela de histórico guarda versões antigas das linhas, com marcação de período de validade (SysStartTime e SysEndTime)

Tudo isso de forma automática, sem precisar de triggers, procedures ou auditorias manuais.


🔍 Exemplo Prático – Criando uma Tabela Temporal

Vamos criar uma tabela de clientes com versionamento temporal:

CREATE TABLE dbo.Cliente (
Cliente_ID int not null primary key,
Nome varchar(50) not null,
RendaMensal decimal(10,2) null,
RendaAnual as RendaMensal * 12,
SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN,
SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN,
PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime))
WITH(SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.Cliente_Hist))

INSERT dbo.Cliente (Cliente_ID,Nome,RendaMensal)
VALUES
(1,'Paulo',10000.00),
(2,'Ana',20000.00),
(3,'Katia',30000.00)

O script acima cria tabela Cliente com tabela histórico de nome Cliente_Hist, para criar com nome padrão basta omitir a cláusula HISTORY_TABLE. A cláusula HIDDEN torna as colunas de controle de alterações (SysStartTime,SysEndTime) invisíveis aos usuários no SELECT *.

SELECT * FROM dbo.Cliente

SELECT Cliente_ID, Nome, RendaMensal, RendaAnual, SysStartTime, SysEndTime
FROM dbo.Cliente

HABILITANDO TEMPORAL TABLE EM TABELA PRÉ-EXISTENTE

Quando a tabela já existe utilizamos o ALTER TABLE para adicionar as duas colunas de controle DATETIME2 e depois outro ALTER TABLE habilitando:

CREATE TABLE dbo.Produto (
Produto_ID int not null primary key,
Descricao varchar(50) not null,
ValorUnitario decimal(10,2) null)

ALTER TABLE dbo.Produto ADD
SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN
CONSTRAINT DF_SysStart DEFAULT SYSUTCDATETIME(),
SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN
CONSTRAINT DF_SysEnd DEFAULT CONVERT(datetime2, '9999-12-31 23:59:59'),  
PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime)

ALTER TABLE dbo.Produto
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.Produto_Hist))

Veja abaixo como a tabela Cliente criada acima aparece no Object Explorer:

  • SysStartTime e SysEndTime controlam o período de validade da linha

  • O SQL Server cria e gerencia automaticamente a tabela de histórico

  • Qualquer UPDATE ou DELETE na tabela principal armazena a versão anterior em Cliente_Hist


✨ Benefícios da Tabela Temporal

  • Rastreabilidade total das alterações

  • Auditoria automática de dados

  • Fácil consulta de valores antigos com FOR SYSTEM_TIME

  • Elimina a complexidade de triggers e rotinas customizadas

  • Suporte nativo do SQL Server (a partir da versão 2016)

🧪 Requisitos para usar Temporal Tables

  • Versão mínima: SQL Server 2016

  • Necessário definir colunas SysStartTime e SysEndTime com GENERATED ALWAYS

  • A tabela precisa ter uma chave primária (PRIMARY KEY)

  • O banco de dados deve estar em compatibility level 130 ou superior


Na Parte 2 dessa série, vamos explorar como consultar os dados históricos e executar queries do tipo “como estava em…”, usando FOR SYSTEM_TIME.

Fui, mas volto com mais SQL Server em breve!

✍️ Sobre o autor
O Prof. Landry é especialista em Microsoft SQL Server desde 1999, Microsoft Trainer, Professor Universitário e criador do canal SQL Server Expert no YouTube, com conteúdo técnico semanal para DBAs e profissionais de dados.

🚀 Quer aprender mais sobre SQL Server?
👉 Me acompanhe no LinkedIn e inscreva-se no canal para não perder nenhuma dica prática!

0
Subscribe to my newsletter

Read articles from SQL Server Expert directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

SQL Server Expert
SQL Server Expert

O Prof. Landry Duailibe é especialista em Microsoft SQL Server desde 1999, Microsoft Certified Trainer, professor universitário e criador do canal SQL Server Expert no YouTube, onde compartilha conteúdo técnico semanal para DBAs e profissionais de dados. Já ajudou milhares de alunos a evoluírem suas habilidades com SQL Server e conquistarem melhores oportunidades na área de dados.