none
Criação de JOB RRS feed

  • Pergunta

  • boa tarde Pessoal,

     

    Gostaria de uma ajuda, seguinte hj no sistema da empresa temos uma lista de aniversariantes por mes do qual a funcionaria do RH todo dia pela manhã dispara um email manualmente informando o aniversariante do dia.

    Gostaria de ajuda para criar um Job no SQL onde ele dispare toda manhã um email informando o Aniversariante do dia pegando de uma tabela a data de nascimento e comparando com a data do dia se verdadeiro entao é aniversariante e qual tratamento fazer para quando nao houver aniversariante no dia?

     

    Se a minha pergunta estiver confusa mandem as duvidas...

     

    Valeu...

    • Movido Gustavo Maia Aguiar quinta-feira, 3 de março de 2011 02:34 (De:SQL Server - Desenvolvimento Geral)
    quarta-feira, 2 de março de 2011 18:40

Respostas

  • Renata,

     

    A ideia geral da para entender, bom, primeira pergunta, voce ja possui a data de nascimento das pessoas numa tabela eu imagino, portanto a primeira coisa a ser feita é pegar as pessoas que fazem aniversario no dia de hoje, uma query +- assim:

    SELECT a.Nome, LEFT(CONVERT(VARCHAr, b.DataNasc, 106),6)

    FROM SuaTabela a

    WHERE LEFT(CONVERT(VARCHAr, b.DataNasc, 106),6) = LEFT(CONVERT(VARCHAr, GetDate(), 106),6)

    Pronto, neste momento voce ja possui as pessoas que fazem aniversario hoje. A partir deste momento, voce deve configurar seu SQL Server para poder enviar email, alguns links que podem ajudar:

    http://www.techrepublic.com/article/setting-up-database-mail-in-sql-server-2005/6161839

    http://technet.microsoft.com/en-us/library/ms175962.aspx

    http://www.mssqltips.com/tip.asp?tip=1523

     

    Depois disso, crie um script que pegue os aniversariantes e depois  utilize a procedure sp_send_dbmail para enviar o email.

     

    Codigo um pouco mais limpo seria:

    declare @data datetime

    set @data = '02/03/2011'

    select day(@data), month(@data)

    e fazer as devidas comparações.

     


    ------------------------------------------------------------- Oracle OCA11g
    • Marcado como Resposta Renata Cardoso quarta-feira, 21 de setembro de 2011 20:16
    quarta-feira, 2 de março de 2011 18:49
    Moderador
  • Renata

     

    Então, é exatamente isso que coloquei acima, se voce colocar um if(exists(query para ver se alguem faz aniversario), se ele retornar no minimo um resultado, ira enviar o email, por isso seu codigo de enviar email deve ficar entre o begin e o else do if, agora, se nao retornar nada, indicando que ngn faz aniversario, cairia no else, que apenas da um print (caso voce schedule este job, nao vera este print), coloquei mais para meu testes e para voce entender melhor rs...


    ------------------------------------------------------------- Oracle OCA11g
    • Marcado como Resposta Renata Cardoso quinta-feira, 17 de março de 2011 13:33
    sexta-feira, 4 de março de 2011 12:02
    Moderador

Todas as Respostas

  • Renata,

    usa a procedure sp_send_dbmail para enviar email.

    entra nesse LINK para criar um job no sql server.

     

    []'s!


    http://www.diaadiasql.com.br
    quarta-feira, 2 de março de 2011 18:44
  • Renata,

     

    A ideia geral da para entender, bom, primeira pergunta, voce ja possui a data de nascimento das pessoas numa tabela eu imagino, portanto a primeira coisa a ser feita é pegar as pessoas que fazem aniversario no dia de hoje, uma query +- assim:

    SELECT a.Nome, LEFT(CONVERT(VARCHAr, b.DataNasc, 106),6)

    FROM SuaTabela a

    WHERE LEFT(CONVERT(VARCHAr, b.DataNasc, 106),6) = LEFT(CONVERT(VARCHAr, GetDate(), 106),6)

    Pronto, neste momento voce ja possui as pessoas que fazem aniversario hoje. A partir deste momento, voce deve configurar seu SQL Server para poder enviar email, alguns links que podem ajudar:

    http://www.techrepublic.com/article/setting-up-database-mail-in-sql-server-2005/6161839

    http://technet.microsoft.com/en-us/library/ms175962.aspx

    http://www.mssqltips.com/tip.asp?tip=1523

     

    Depois disso, crie um script que pegue os aniversariantes e depois  utilize a procedure sp_send_dbmail para enviar o email.

     

    Codigo um pouco mais limpo seria:

    declare @data datetime

    set @data = '02/03/2011'

    select day(@data), month(@data)

    e fazer as devidas comparações.

     


    ------------------------------------------------------------- Oracle OCA11g
    • Marcado como Resposta Renata Cardoso quarta-feira, 21 de setembro de 2011 20:16
    quarta-feira, 2 de março de 2011 18:49
    Moderador
  • minha query ficou assim:

    select P.pe_nome,

    CAST(MONTH(GETDATE()) AS CHAR(2)) + RIGHT('0' + CAST(day(GETDATE()) AS VARCHAR(2)),2) Data_Atual,

    CAST(MONTH(PE_DT_NASC) AS CHAR(3)) + RIGHT('0' + CAST(day(PE_DT_NASC) AS VARCHAR(2)),2) Data_nasc

    from FO_PESSOA P

    inner join FO_FUNCIONARIO F

    on P.pe_nome = F.pe_nome

    where FU_STF_CODIGO = 'A'

    AND LEFT(CONVERT(VARCHAr, PE_DT_NASC, 106),6) = LEFT(CONVERT(VARCHAr, GetDate(), 106),6)

     

    deu certinho mas como eu faria um tratamento para no dia em que niguem faz aniversario para nao disparar o email?

    preciso mesmo utilizar uma proc para esse Job? nao poso apenas criar um JOB com este codigo que rode todo dia pela manha e dispare um email para geral?

     

    quinta-feira, 3 de março de 2011 14:09
  • Renata,

     

    Coloque assim:

    IF(EXISTS(SuaQuery)

    BEGIN

    ENVIA EMAIL

    END

    BEGIN ELSE

    print ('ngn faz aniversario')

    END ELSE


    ------------------------------------------------------------- Oracle OCA11g
    quinta-feira, 3 de março de 2011 14:17
    Moderador
  • Muito obrigado por sua ajuda Fabrizzio a principio deu certo, irei criar o Job para Testar e assim que estiver tudo "Ok" marco sua resposta. Obrigado!!!
    quinta-feira, 3 de março de 2011 14:30
  • coloco a msg "ninguem faz aniversario" mas o JOB nao ira disparar o email?

     

    caso o select nao me retorno nada nao quero q dispare email como faria isso?

    quinta-feira, 3 de março de 2011 18:33
  • Renata

     

    Então, é exatamente isso que coloquei acima, se voce colocar um if(exists(query para ver se alguem faz aniversario), se ele retornar no minimo um resultado, ira enviar o email, por isso seu codigo de enviar email deve ficar entre o begin e o else do if, agora, se nao retornar nada, indicando que ngn faz aniversario, cairia no else, que apenas da um print (caso voce schedule este job, nao vera este print), coloquei mais para meu testes e para voce entender melhor rs...


    ------------------------------------------------------------- Oracle OCA11g
    • Marcado como Resposta Renata Cardoso quinta-feira, 17 de março de 2011 13:33
    sexta-feira, 4 de março de 2011 12:02
    Moderador