1
resposta

Tabela Histórica no SQL Server

Fiquei com uma dúvida: E como faço para criar uma tabela histórica, que vá guardado informações que entram em outra tabela? Pois na tabela já existente, os dados são dinâmicos, entram e saem.

1 resposta

Oi Juliana,

Para criar uma tabela histórica no SQL Server que armazene as informações de uma tabela existente enquanto os dados nesta tabela são dinâmicos, você pode utilizar um gatilho (trigger) que capture as operações de inserção, atualização e exclusão. Dessa forma, sempre que houver uma mudança na tabela original, os registros podem ser salvos na tabela histórica.

Aqui está um exemplo prático:

  1. Suponha que você tenha uma tabela chamada Produtos:
CREATE TABLE Produtos (
    Id INT PRIMARY KEY,
    Nome NVARCHAR(100),
    Preco DECIMAL(10, 2)
);
  1. Agora, você pode criar uma tabela histórica chamada ProdutosHistorico:
CREATE TABLE ProdutosHistorico (
    Id INT,
    Nome NVARCHAR(100),
    Preco DECIMAL(10, 2),
    DataAlteracao DATETIME DEFAULT GETDATE(),
    TipoAlteracao NVARCHAR(10) -- 'INSERT', 'UPDATE' ou 'DELETE'
);
  1. Em seguida, crie um gatilho para capturar as inserções, atualizações e exclusões:
CREATE TRIGGER trg_ProdutosHistorico
ON Produtos
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
    -- Para inserções
    INSERT INTO ProdutosHistorico (Id, Nome, Preco, TipoAlteracao)
    SELECT Id, Nome, Preco, 'INSERT'
    FROM inserted;

    -- Para atualizações
    INSERT INTO ProdutosHistorico (Id, Nome, Preco, TipoAlteracao)
    SELECT Id, Nome, Preco, 'UPDATE'
    FROM inserted;

    -- Para exclusões
    INSERT INTO ProdutosHistorico (Id, Nome, Preco, TipoAlteracao)
    SELECT Id, Nome, Preco, 'DELETE'
    FROM deleted;
END;

Com isso, sempre que você inserir, atualizar ou excluir um produto, as informações correspondentes serão registradas na tabela ProdutosHistorico, permitindo que você mantenha um histórico dos dados.

Lembre-se de ajustar o gatilho conforme a lógica do seu negócio e as colunas que deseja monitorar.

tux matrix    Caso este post o tenha ajudado, por favor, marcar como solucionado ☑️. Bons Estudos! 🤓