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
eSysEndTime
)
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
eSysEndTime
controlam o período de validade da linhaO SQL Server cria e gerencia automaticamente a tabela de histórico
Qualquer
UPDATE
ouDELETE
na tabela principal armazena a versão anterior emCliente_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
eSysEndTime
comGENERATED 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!
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.