Eu tenho um banco de dados central para o qual escrevo os resultados do trabalho em todos os meus servidores. Eu passo 3 parâmetros via powershell em um trabalho SQL de volta para um sp no servidor central que verifica se o trabalho deve estar em execução naquele momento, etc. As informações são então expostas via SSRS para que possamos ver falhas de trabalho / trabalhos de longa duração / & jobs que não foram executados, mas deveriam ser executados (ou se alguém mexeu com um cronograma).
Para fazer isso, tenho 2 etapas de trabalho adicionadas a cada trabalho em cada servidor e gostaria de reduzir o script para apenas 1 etapa adicionada a cada trabalho.. possivelmente até chamá-lo de um compartilhamento de rede.
Mas meu problema é um dos 3 parâmetros que passo. Eu preciso obter o jobid em execução ou o nome do job de dentro do job em execução para não precisar codificar o parâmetro name. Os 3 parâmetros que eu passo são jobid, status(success/fail), errormsg. O script powershell que escrevi é bastante simples.
Invoke-sqlcmd -ServerInstance "MYRemoteSYSTEM" -Database remoteDB -Query "exec dbo.JOB_LOG 'JOBNAME/ID','Success/FAIL','BAD MESSAGE HERE'"
Isso escreve o que eu preciso para a tabela. Eu olhei msdb.dbo.sp_help_job / msdb.dbo.sp_get_composite_job_info / dbo.xp_sqlagent_enum_jobs / mas nenhum deles garantirá que eu obtenha o ID ou o nome do trabalho em execução correto no caso de haver mais de 1 trabalho em execução em o mesmo tempo.
Eu até tentei olhar para sys.sysprocesses, mas acho que, como o trabalho do agente é um script powershell, ele mostra como ".Net SqlClient Data Provider", então não posso cortar o JOBID binário dos trabalhos que mostram como "SQLAgent - TSQL JobStep (Job 0xF1800243164745429C30474FFD5C990C: Step 1)" --- isso eu aprendi com o post de Denny cherry - obrigado denny-
Quaisquer idéias sobre como pegar o jobid em execução seriam muito apreciadas.
Obrigado,
Chris