TRIGGERS NO BANCO DE DADOS - DADO ANTIGO E DADO NOVO
20/11/2018
0
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
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
Wagner Caetano
Curtir tópico
+ 0
Responder
Posts
20/11/2018
Emerson Nascimento
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
23/11/2018
Ricardo Pestana
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
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
Clique aqui para fazer login e interagir na Comunidade :)