2008-09-24 6 views
2

Je travaille actuellement sur SP en SQL 2005. En utilisant SP, je crée un travail et je le planifie pour une période donnée. Ces travaux prennent au moins 5 à 10 minutes à compléter car la base de données est très énorme. Mais je ne suis pas au courant de la façon de vérifier le statut du travail. Je veux savoir si cela s'est terminé avec succès ou s'il y a eu une erreur dans l'exécution. En cas d'exception, je renvoie également le code d'erreur correct. Mais je ne suis pas au courant de l'endroit où je peux vérifier ce code d'erreur.Statut du travail SQL

Répondre

3

C'est ce que je pouvais trouver, peut-être résoudre votre problème:

  1. SP pour obtenir le activiity d'emploi actuel.
exec msdb.dbo.sp_help_jobactivity @job_id = (your job_id here) 

Vous pouvez exécuter cette SP et placez le résultat dans une table temporaire et obtenir le résultat nécessaire à partir de là.

ont Sinon, un coup d'œil à ces tables:

  • msdb.dbo.sysjobactivity

  • msdb.dbo.sysjobhistory

Exécutez ce qui suit pour voir l'association entre ces les tables.

exec sp_helptext sp_help_jobactivity

0

--copy dans Query analizer et formater correctement afin que vous puissiez le comprendre easyly --Pour exécuter votre tâche (Job) à l'aide de requêtes exec msdb.dbo.sp_start_job @job_name = 'Nom du travail', @ nom_serveur = nom du serveur - Après l'exécution de la requête pour vérifier si elle est terminée ou non Déclarez @JobId comme varchar (36) Sélectionnez @JobId = job_id de sysjobs où name = 'Votre nom de travail ' Déclarez @JobStatus comme int set @JobStatus = -1 Alors que @JobStatus < = -1 Begin --Provide timedelay selon votre emploi sélectionnez @JobStatus = isnull (run_status, -1) de JA sysjobactivity, sysjobhistory JH où JA.job_history_id = JH.instance_id et JA.job_id = @JobId Fin sélectionner @JobStatus

null = 1 = Exécution fininshed avec succès 0 = fini avec l'erreur

--once votre travail fininsh vous obtenir le résultat

0

J'ai obtenu un meilleur code de here

Use msdb 
go 

select distinct j.Name as "Job Name", j.description as "Job Description", h.run_date as LastStatusDate, 
case h.run_status 
when 0 then 'Failed' 
when 1 then 'Successful' 
when 3 then 'Cancelled' 
--when 4 then 'In Progress' 
end as JobStatus 
from sysJobHistory h, sysJobs j 
where j.job_id = h.job_id and h.run_date = 
(select max(hi.run_date) from sysJobHistory hi where h.job_id = hi.job_id) 
order by 1 
+1

AVERTISSEMENT: run_status de 4 (En cours) ne se produit pas (http://msdn.microsoft.com/en-us/library/ms174997.aspx) –

+0

Convenu . Mais il servira toujours le but non? – Faiz

Questions connexes