2017-06-02 8 views
0

SQLジョブが現在実行中であるかどうかを確認します。 "run_status"列が正しいかどうかチェックしますか?各列をループすることなくこれを行う簡単な方法はありますか?SQL Serverジョブのステータスを確認します

public int CheckAgentJob(string connectionString, string jobName) 
     { 
      SqlConnection dbConnection = new SqlConnection(connectionString); 
      SqlCommand command = new SqlCommand(); 
      command.CommandType = System.Data.CommandType.StoredProcedure; 
      command.CommandText = "msdb.dbo.sp_help_jobactivity"; 
      command.Parameters.AddWithValue("@job_name", jobName); 
      command.Connection = dbConnection; 
      using (dbConnection) 
      { 
       dbConnection.Open(); 
       using (command) 
       { 
        SqlDataReader reader = command.ExecuteReader(); 
        reader.Read(); 
        Object[] values = new Object[reader.FieldCount]; 
        int fieldCount = reader.GetValues(values); 

        int jobStatus = -1; // inactive 
        for (int i = 0; i < fieldCount; i++) 
        { 
         object item = values[i]; 
         string colName = reader.GetName(i); 
         if (colName == "run_status") 
         { 
          if (values[i] != null) 
          { 
           jobStatus = (int)values[i]; 
           break; 
          } 
         } 
        } 
        reader.Close(); 
        return jobStatus; 
       } 
      } 
     } 
+0

@JeroenMostert MSDN

おかげから取られた(https://stackoverflow.com/help/tagging)あなたは '[msdb.dboを問い合わせることができ – Liam

+0

。 sysjobactivity'](https://docs.microsoft.com/en-us/sql/relational-databases/system-tables/dbo-sysjobactivity-transact-sql)を参照してください。それは文書化されている。ストアドプロシージャはちょうどいいです。 –

+1

[ジョブのステータスを確認するにはどうすればよいですか?](https://stackoverflow.com/questions/200195/how-can-i-determine-the-status-of-a-job) – Liam

答えて

0

このコードは私が必要としたコードです。 [質問のタイトルにタグを入れないでください]

SELECT sj.Name, 
    CASE 
     WHEN sja.start_execution_date IS NULL THEN 'Not running' 
     WHEN sja.start_execution_date IS NOT NULL AND sja.stop_execution_date IS NULL THEN 'Running' 
     WHEN sja.start_execution_date IS NOT NULL AND sja.stop_execution_date IS NOT NULL THEN 'Not running' 
    END AS 'RunStatus' 
FROM msdb.dbo.sysjobs sj 
JOIN msdb.dbo.sysjobactivity sja 
ON sj.job_id = sja.job_id 
WHERE session_id = (
    SELECT MAX(session_id) FROM msdb.dbo.sysjobactivity); 
0

あなたはmsdbデータベースでストアドプロシージャsp_help_jobを通してそれを確認することができます。

だから実行します。

Use msdb 
go 
exec dbo.sp_help_job 

それはあなたが1という名前の列current_execution_statusを見つけることができるすべてのジョブの詳細情報を返します。 1の場合は実行中です。リンクから詳細を得ることができますsp_help_job

また、ストアドプロシージャにパラメータを提供することもできます。