Usuário com melhor resposta
Trigger Linha

Pergunta
-
Bom dia !
Amigos exite alguma maneira de se criar uma trigger para ser executada apenas quando um campo de uma linha for alterada, pois tenho a seguinte situação precisava disparar um e-mail sempre que uma data na tabela fosse alterada eu ja tenho toda a estrutura do e-mail porem queria que me fosse disparado assim que a data fosse alterada.
E não posso fazer por coluna pois ela sofre alteração em vários campos então precisava que pega-se o campo especifico.
Respostas
-
Deleted
- Marcado como Resposta HANDERSONPAIS terça-feira, 17 de setembro de 2019 11:32
Todas as Respostas
-
-
-
-
-
-
Mesmo fechando deu o erro
CREATE TRIGGER monitora_VALPRM
on DBO.IBETPRMEMP
after UPDATE as
begin
-- encerra processamento se não há linha a processar
IF not exists (SELECT 1 from INSERTED)
return;
-- encerra processamento caso a coluna VALPRM não faça parte do comando UPDATE
IF not UPDATE (VALPRM)
return;
-- analisa linha a linha que tenha sido alterada na coluna VALPRM
declare @I_CODEMP int, @I_CODPRM int, @D_VALPRM varchar(50), @I_VALPRM varchar(50);
declare @Houve_caso bit;
declare Le_Linha cursor
for SELECT I.CODEMP, I.CODPRM, D.VALPRM as D_VALPRM, I.VALPRM as I_VALPRM
from INSERTED as I
inner join DELETED as D on D.CODEMP = I.CODEMP
and D.CODPRM = I.CODPRM
where I.CODPRM = 17
and (D.VALPRM <> I.VALPRM
or (D.VALPRM is null and I.VALPRM is not null)
or (D.VALPRM is not null and I.VALPRM is null));
set @Houve_caso= 'false';
OPEN Le_Linha;
-- lê primeira linha que tenha sido alterada
FETCH NEXT
from Le_Linha
into @I_CODEMP, @I_CODPRM, @D_VALPRM, @I_VALPRM;
while @@fetch_status = 0
begin
set @Houve_caso= 'true';
-- monta corpo do e-mail
DECLARE @tableHTML NVARCHAR(MAX) ;
DECLARE @DATA varchar(50) ;
DECLARE @DATA1 varchar(50) ;
DECLARE @assunto varchar(50) ;
set @DATA = CONVERT (char, GETDATE()-3,103) ;
set @DATA1 = CONVERT (date, GETDATE()-3);
set @assunto= 'Fechamento Caixa '+@DATA
SET @tableHTML =
N'<font color ="Red"><H1>Extrato Caixa</H1></font>' +
N'<font color ="Red"><H2>Fechamento dia</H2></font>' +
N'<font color ="blue">'+@DATA+ '</font>'+
N'<table border="1">' +
N'<tr><th>TIPO</th><th>VALOR</th>' +
CAST(
(SELECT
TD= C1 ,'',
TD= C2,''
from (
SELECT IBETTPOPRSCTA.DESTPOPRSCTA AS c1, Flexx00151700.dbo.func_converter_moeda ( SUM (IBETDTTPRSCTA.VALDTTPRSCTA),'pt-br') AS c2
FROM Flexx00151700.dbo.IBETDTTPRSCTA IBETDTTPRSCTA (Nolock),
Flexx00151700.dbo.IBETTPOPRSCTA IBETTPOPRSCTA (Nolock),
Flexx00151700.dbo.IBETVIAVEC IBETVIAVEC (Nolock)
WHERE IBETTPOPRSCTA.CODEMP = IBETDTTPRSCTA.CODEMP AND
IBETTPOPRSCTA.CODTPOPRSCTA = IBETDTTPRSCTA.CODTPOPRSCTA AND
IBETTPOPRSCTA.TPOPRSCTA = IBETDTTPRSCTA.TPOPRSCTA AND
IBETVIAVEC.CODEMP = IBETDTTPRSCTA.CODEMP AND
IBETVIAVEC.CODEMP = IBETTPOPRSCTA.CODEMP AND
IBETVIAVEC.CODVEC = IBETDTTPRSCTA.CODVEC AND
IBETVIAVEC.NUMVIAVEC = IBETDTTPRSCTA.NUMVIAVEC AND
CONVERT (date, IBETVIAVEC.DATRTNVIAVEC) = @DATA1
and (IBETDTTPRSCTA.TPOPRSCTA<>'D')
GROUP BY IBETTPOPRSCTA.DESTPOPRSCTA, IBETDTTPRSCTA.TPOPRSCTA
)
as TD order by 1
FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) + N'</table>' ;
-- lê próxima linha que tenha sido alterada
FETCH NEXT
from Le_Linha
into @I_CODEMP, @I_CODPRM, @D_VALPRM, @I_VALPRM;
end;
CLOSE Le_Linha;
DEALLOCATE Le_Linha;
-- enfileira e-mail
IF @Houve_caso = 'true'
begin
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'servidor teste',
@recipients='handersonpais@gmail.com',
@subject = @assunto,
@body = @tableHTML,
@body_format = 'HTML' ;
end;
end;
go -
-
-
Deleted
- Marcado como Resposta HANDERSONPAIS terça-feira, 17 de setembro de 2019 11:32
-
-