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.
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.
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:
Produtos
:CREATE TABLE Produtos (
Id INT PRIMARY KEY,
Nome NVARCHAR(100),
Preco DECIMAL(10, 2)
);
ProdutosHistorico
:CREATE TABLE ProdutosHistorico (
Id INT,
Nome NVARCHAR(100),
Preco DECIMAL(10, 2),
DataAlteracao DATETIME DEFAULT GETDATE(),
TipoAlteracao NVARCHAR(10) -- 'INSERT', 'UPDATE' ou 'DELETE'
);
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.