TRIGGERS NO BANCO DE DADOS - DADO ANTIGO E DADO NOVO

20/11/2018

6

Boa noite pessoal,
Estou fazendo um projeto pro curso de informática e preciso usar trigger no banco de dados, mas não estou conseguindo cria-lo , cada site que pesquiso como faz aparece uma sintaxe diferente. Então eu preciso criar um trigger para guardar um preço antes de um update , depois do update e a data e hora.

Segue a tabela
https://prnt.sc/lki6c9

eu pensei em fazer assim

‘create trigger AlteracaoPreco
on WQuarto
for update
as
insert into precoQuartoChange(id_quarto,precoAntes,precoDepois,data)
values(id_quarto,OLD.precoantes,preco,getDate())’

TABELA precoQuartoChange
https://prnt.sc/lki6dy

provavelmente não está certo a forma de pegar os dados, porque eu não sei direito como pegar um dado antes da modificação e um dado depois , pesquisei na internet e não achei.]

Caso seja relevante , meu SQL SERVER é 12.0.2269.0
Responder

Posts

Para qual tabela você quer criar o trigger?
CREATE TRIGGER <Nome_Do_Trigger> 
   ON  <Nome_Da_Tabela> 
   AFTER <INSERT, DELETE ou UPDATE>
AS 
BEGIN
	SET NOCOUNT ON;
	<seu código>
END
GO

Responder
Wagner,

Simulei a situação de acordo com o que eu entendi do seu problema, criei uma tabela chamada quarto e outra chamada quarto_log. A cada alteração de preço, gravo na tabela quarto_log os valores do preço atual e anterior mantendo assim um histórico das alterações... não registro as inclusões de preço nem alterações em outros campos da tabela quarto apenas alteração de preço.


Vê se assim te ajuda... qq dúvidaposta aí...


CREATE TABLE `quarto` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`descricao` varchar(45) NOT NULL,
`preco` decimal(10,2) DEFAULT NULL,
`dataAtualizacao` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;


CREATE TABLE `quarto_log` (
`idlog` int(11) NOT NULL AUTO_INCREMENT,
`idQuarto` int(11) DEFAULT NULL,
`preco_anterior` decimal(10,2) DEFAULT NULL,
`preco_atual` decimal(10,2) DEFAULT NULL,
`data_atualizacao` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`idlog`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

CREATE DEFINER=`root`@`%` TRIGGER `devmedia`.`quarto_AFTER_UPDATE` AFTER UPDATE ON `quarto` FOR EACH ROW
BEGIN
if new.preco <> old.preco then
insert into quarto_log (idquarto, preco_anterior, preco_atual) values (new.id, old.preco, new.preco);
end if;
END
Responder