Usuário com melhor resposta
TRIGGER PARA ENVIAR EMAIL

Pergunta
-
OLÁ GALERA.
MONTEI UM SCRIPT PARA QUE TODA VEZ EM QUE O VALOR DE UM DETERMINADO CAMPO FOSSE ALTERADO, O BANCO DE DADOS ATIVASSE A TRIGGER PARA ENVIAR UM EMAIL.
FIZ UM TESTE E NÃO RECEBI O E-MAIL.
ALGUÉM PODE ME INFORMAR O QUE ESTÁ ERRADO NO SCRIPT ABAIXO.
IF EXISTS(SELECT * FROM master.dbo.sysmessages
WHERE error = 50002)
exec SP_DropMessage 50002
go
Exec SP_AddMessage 50002,3,'Peça Recebida'
go
if exists ( select * from sys.objects where name = 'P_EnviaMensagem')
drop procedure P_EnviaMensagem
go
CREATE PROCEDURE P_EnviaMensagem
@Usuario varchar(255) = 'everton@abc.com.br'
AS
Exec msdb.dbo.SP_send_dbmail
@Profile_name = 'T.I Abc',
@Recipients = @Usuario',
@Body = 'Nota fiscal cadastrada ',
@Subject = 'Produto recebido / conferido',
@Query =
'select rc_nr as [N° Req Compra],
CONVERT (char(10),rc_dt,103) as [Dt Requisição],
r.pd_cd as [Cod. Prod],
pd_ds as Descricao,
rc_qt as Qtde,
fun_nmguerra as Solicitante,
isnull(r.os_nr,"******") as [N° O.S],
isnull(tpos_cd,"**") as [Tipo O.S],
isnull (r.pb_nr,"*******") as [Pedido Balcão],
r.pc_nr as [N° Pedido Dealer],
pc_nrmont as [Pedido Fabrica],
e.nf_lanc as [N.E],
e.nf_nr as [N° NF],
Case when e.me_cd like "CO%" then "Compra"
when e.me_cd like "TE%" then "Transf."+" - "+
case when e.cg_cd = 4497 then "STS" when e.cg_cd = 5 then "SBC" when e.cg_cd = 4 then "BAR"
end
end as [Tipo de Atendimento],
CONVERT (char(10),e.nf_dtcad,103) as [Dt Cadastro N.E],
CONVERT (char(10),e.nf_dtemis,103) as [Dt Emissao],
CONVERT (char(10),e.nf_dtent,103) as [Dt Entrada],
receb.nf_qtrecebida as [Qtd Recebida]
from ead_rc r
join ger_pd p on p.pd_cd=r.pd_cd
join tab_fun f on f.fun_cd=r.fun_cad
join ger_nfei i on i.pd_cd=r.pd_cd
join ger_nfe e on e.nf_lanc=i.nf_lanc and i.pc_nr=r.pc_nr
join ger_nfec receb on receb.nf_lanc=e.nf_lanc and receb.pd_cd=i.pd_cd
join ger_cg c on c.cg_cd=e.cg_cd
join ead_pc pc on pc.pc_nr=r.pc_nr'
go
IF EXISTS(SELECT * FROM sys.triggers
WHERE name = 'T_InformaPecaRecebida')
drop trigger dbo.T_InformaPecaRecebida
go
CREATE TRIGGER T_InformaPecaRecebida
ON ger_nfec
FOR INSERT
AS
DECLARE @nr_req char(7),
@dt_req datetime,
@cod_prod char(14),
@descri_prod varchar (50),
@qt_prod float,
@solicitante varchar (20),
@os_nr char (7),
@tp_os char(2),
@ped_blc char(7),
@nr_ped_dealer char (7),
@nr_ped_fab char(7) ,
@nr_ne char (7),
@nr_nota char(7),
@tp_atend varchar (12),
@dt_cad_ne datetime,
@dt_Emis datetime,
@dt_ent datetime,
@nf_qtrecebida float
select
@nr_req = rc_nr,
@dt_req = rc_dt,
@cod_prod = r.pd_cd,
@descri_prod = pd_ds,
@qt_prod = rc_qt,
@solicitante = fun_nm,
@os_nr = r.os_nr,
@tp_os = tpos_cd,
@ped_blc = pb_nr,
@nr_ped_dealer = r.pc_nr,
@nr_ped_fab = pc_nrmont,
@nr_ne = receb.nf_lanc,
@nr_nota = nf_nr,
@tp_atend = me_cd,
@dt_cad_ne = e.nf_dtcad,
@dt_Emis = nf_dtemis,
@dt_ent = nf_dtent,
@nf_qtrecebida = inserted.nf_qtrecebida
from ead_rc r
join ger_pd p on p.pd_cd=r.pd_cd
join tab_fun f on f.fun_cd=r.fun_cad
join ger_nfei i on i.pd_cd=r.pd_cd
join ger_nfe e on e.nf_lanc=i.nf_lanc and i.pc_nr=r.pc_nr
join ger_nfec receb on receb.nf_lanc=e.nf_lanc and receb.pd_cd=i.pd_cd
join ger_cg c on c.cg_cd=e.cg_cd
join ead_pc pc on pc.pc_nr=r.pc_nr
join inserted on receb.nf_qtrecebida=inserted.nf_qtrecebida
Respostas
-
Everton,
Você esta tentando executar o envio do seu Select conectado no MSDB ou no seu banco de dados?
Na linha do From coloque o NomedoBancodedados.NomedoSchema.NomedaTabela
Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Marcado como Resposta Everton.moreira segunda-feira, 25 de maio de 2015 17:12
Todas as Respostas
-
Everton,
Você configurou uma conta de Operador e também o Database Mail?
O SQL Server Agent esta em execução?
Um detalhe importante que você deve também analisar relaciona-se ao usuário que esta conectado no banco de dados no momento em que o trigger é disparado, o mesmo deve ter permissão para poder executar a System Stored Procedure SP_Send_Dbmail.
Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Pedro, sou iniciante nestes processos. Mas vamos lá.
O Database mail e a conta de operador está configurado e o Agente também está em execução, quando há falhas nos jobs eu recebo um e-mail indicando a falha.
Eu fiz uns testes
Executei no banco este script
Exec msdb.dbo.SP_send_dbmail
@Profile_name = 'T.I Vetelli',
@Recipients = 'everton.moreira@vetelli.com.br',
@Body = 'Teste enviado pelo SQL Server',
@Subject = 'Mensagem enviada com sucesso'Recebi normalmente em meu e-mail este teste.
Quando tento executo este abaixo:
Exec msdb.dbo.SP_send_dbmail
@Profile_name = 'T.I Vetelli',
@Recipients = 'everton.moreira@vetelli.com.br',
@Body = 'Nota fiscal cadastrada ',
@Subject = 'Produto recebido / conferido',
@Query =
'select rc_nr as [N° Req Compra],
CONVERT (char(10),rc_dt,103) as [Dt Requisição],
r.pd_cd as [Cod. Prod],
pd_ds as Descricao,
rc_qt as Qtde,
fun_nmguerra as Solicitante,
isnull(r.os_nr,"******") as [N° O.S],
isnull(tpos_cd,"**") as [Tipo O.S],
isnull (r.pb_nr,"*******") as [Pedido Balcão],
r.pc_nr as [N° Pedido Dealer],
pc_nrmont as [Pedido Fabrica],
e.nf_lanc as [N.E],
e.nf_nr as [N° NF],
Case when e.me_cd like "CO%" then "Compra"
when e.me_cd like "TE%" then "Transf."+" - "+
case when e.cg_cd = 4497 then "STS" when e.cg_cd = 5 then "SBC" when e.cg_cd = 4 then "BAR"
end
end as [Tipo de Atendimento],
CONVERT (char(10),e.nf_dtcad,103) as [Dt Cadastro N.E],
CONVERT (char(10),e.nf_dtemis,103) as [Dt Emissao],
CONVERT (char(10),e.nf_dtent,103) as [Dt Entrada],
receb.nf_qtrecebida as [Qtd Recebida]
from ead_rc r
join ger_pd p on p.pd_cd=r.pd_cd
join tab_fun f on f.fun_cd=r.fun_cad
join ger_nfei i on i.pd_cd=r.pd_cd
join ger_nfe e on e.nf_lanc=i.nf_lanc and i.pc_nr=r.pc_nr
join ger_nfec receb on receb.nf_lanc=e.nf_lanc and receb.pd_cd=i.pd_cd
join ger_cg c on c.cg_cd=e.cg_cd
join ead_pc pc on pc.pc_nr=r.pc_nr'
DÁ O SEGUINTE ERRO:
Msg 22050, Level 16, State 1, Line 0
Error formatting query, probably invalid parameters
Msg 14661, Level 16, State 1, Procedure sp_send_dbmail, Line 504
Query execution failed: Mensagem 208, Nível 16, Estado 1, Servidor VETELLI-S01\VETELLI_S01, Linha 1
Nome de objeto 'ead_rc' inválido.O OBJETO QUE INDICA COMO INVÁLIDO (EAD_RC) É UMA TABELA DO MEU BANCO.
-
Everton,
Você esta tentando executar o envio do seu Select conectado no MSDB ou no seu banco de dados?
Na linha do From coloque o NomedoBancodedados.NomedoSchema.NomedaTabela
Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Marcado como Resposta Everton.moreira segunda-feira, 25 de maio de 2015 17:12
-