Tenho uma tabela de cadastro do SQL Server, tenho uma coluna que apresenta o status desse cadastro ('A','I','S','C').
Criei um campo com nome Update_data, que receberá um datatime toda vez que o cliente alterar o status do cadastro. Isso também vale para um insert.
Estou com dúvidas, pois nunca criei uma Trigger em sql server.
Ex: da minha tabela
ID | Processo | status | Update_data
1 | A33 | A | null
2 | A34 | I | null
3 | A55 | A | null
Não consegui avançar no seguinte exemplo abaixo trigger:
CREATE TRIGGER atualizaData
ON cadastro
AFTER INSERT,UPDATE
AS
IF INSERT OR UPDATE(status)
BEGIN
UPDATE cadastro SET Update_data = GETDATE()
WHERE id = id_que_foi_modifica/inserida
END
Ao final, será atualizado com a data atual somente se houver modificação ou inserção no campo da situação.
Boa tarde, tenho 2 tabelas "prodvdarm" que cadastro produtos de ema empresa com:
codVendedor - int,
codArmar - int,
quantidade int,
valor - numeric 12,2,
dataentra - data tabela "entradarm"
codVendedor - int,
codArmar - int,
quantidade int,
valor - numeric 12,2,
Conheço pouco de triggers então pelos exemplos tentei fazer esta que te enviei, preciso de uma para entrar com os dados checar se existe este código vendedor e código armarinho, existindo atualiza(update) a quantidade e o valor - se não existir entra com novos dados(insert) fia assim mais ta dando erro
CREATE DEFINER=`root`@`localhost` TRIGGER `bailledados`.`trg_entradarm_entrada` BEFORE INSERT ON `entradarm` FOR EACH ROW
BEGIN
declare codVendedor int;
declare codArmar int;
select codVendedor codArmar from prodvdmat;
IF (codVendedor <> new.codVendedor and codArmar <> new.codArmar) then
insert into prodvdmat(codVendedor, codArmar, quantidade, valor, datacompra) values (new.codVendedor, new.codArmar, new.quantidade, new.valor, now());
else
UPDATE prodvdmat SET quantidade = quantidade + new.Quantidade, valor = valor + new.valor WHERE codVendedor = new.codVendedor and codArmar = new.codArmar;
end if;
END
CREATE TABLE prodvdedor ( codPrdvdor int(10) NOT NULL AUTO_INCREMENT, codVendedor int(11) NOT NULL, codTecido int(11) NOT NULL, codCor int(11) NOT NULL, medida decimal(10,2) DEFAULT NULL, stockMedidas decimal(10,2) DEFAULT NULL, peso decimal(10,4) DEFAULT NULL, stockPeso decimal(10,4) DEFAULT NULL, dataCompra date NOT NULL, valor decimal(10,2) NOT NULL, PRIMARY KEY (codPrdvdor), KEY PK_prodvdedor_vendededor_idx (codVendedor), KEY Pk_prodvdedor_tecidos_idx (codTecido), KEY Pk_prodvdedor_cores_idx (codCor), CONSTRAINT Pk_prodvdedor_cores FOREIGN KEY (codCor) REFERENCES cores (codCor) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT Pk_prodvdedor_tecidos FOREIGN KEY (codTecido) REFERENCES tecidos (codTecido) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT PK_prodvdedor_vendedores FOREIGN KEY (codVendedor) REFERENCES vendedores(codVendedor) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;Pciso criar uma trigger
preciso criar uma trigger para atualizar os campos stockMedidas e stockPeso, quando digito os dados ela procura se tem outra informação com os campos pedidos e atualiza, fiz da seguinte maneira:
CREATE DEFINER=`root`@`localhost` TRIGGER `bailledados`.`trg_AtualizarProdVendor` BEFORE INSERT ON `prodvdedor` FOR EACH ROW
BEGIN
SET @stockAntigo = (SELECT stockMedidas FROM prodvdedor WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor);
UPDATE prodvdedor
SET stockMedidas=@stockAntigo+new.medida WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor;
SET @stockAntigo1 = (SELECT stockPeso FROM prodvdedor WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor);
UPDATE prodvdedor
SET stockPeso=@stockAntigo1+new.peso WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor;
SET @valorAntigo = (SELECT valor FROM prodvdedor WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor);
UPDATE prodvdedor
SET valor=@valorAntigo1+new.valor WHERE codVendedor=new.codVendedor and codTecido=new.codTecido and codCor=new.codCor;
END
Só que não funciona da erro:
insert
into
bailledados.prodvdedor
(codCor, codTecido, codVendedor, medida, stockMedidas, peso, stockPeso, dataCompra, valor)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?)
WARN: SQL Error: 1442, SQLState: HY000
ERROR: Can't update table 'prodvdedor' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Informações: could not execute statement
IF(OLD.idDepartamentos <> NEW.idDepartamentos)
THEN
INSERT INTO px_pedidos_log
(idPedido,
campo,
valor_novo,
valor_antigo
)
values
(NEW.id,
'idDepartamentos',
NEW.idDepartamentos,
OLD.idDepartamentos
);
END IF
Eu queria fazer isso com mais campos na mesma trigger.
Tentei abaixo e dá erro.
Alguma luz para fazer isso ?
Preciso fazer isso com 6 campos.
IF(OLD.idDepartamentos <> NEW.idDepartamentos)
THEN
INSERT INTO px_pedidos_log
(idPedido,
campo,
valor_novo,
valor_antigo
)
values
(NEW.id,
'idDepartamentos',
NEW.idDepartamentos,
OLD.idDepartamentos
);
END IF;
IF(OLD.idAcao <> NEW.idAcao)
THEN
INSERT INTO px_pedidos_log
(idPedido,
campo,
valor_novo,
valor_antigo
)
values
(NEW.id,
'idAcao',
NEW.idAcao,
OLD.idAcao
);
END IF;
Bom dia pessoal!
Estou passando um sufoco aqui na criação de um sistema.
É o seguinte, existem 5 tabelas: Membros | Objetivos | Email | Perguntas | Respostas
O Administrador cadastra os membros, cria o email (dentro do sistema tem um editor WYSIWYG), perguntas e respostas.
O administrador na hora de fazer o cadastro ou edição do membro, ele diz qual vai ser o próximo objetivo, qual email vai ser enviado, qual a pergunta que vai junto com o email e qual reposta .. junto com a edição vem A DATA E A HORA PRA ISSO ACONTECER.
A dúvida é a seguinte: Como crio um Trigger para enviar o email criado naquela determinada data e hora?