多くの場合、SQL Serverエージェントジョブのリストを取得する最も簡単な方法は、SSMSオブジェクトエクスプローラーでSQLServerエージェントノードを展開することです。
しかし、それが唯一の方法ではありません。また、環境によっては、オプションではない場合もあります。 SSMSまたはSQLServerエージェントジョブを表示できるデータベースツールがない場合は、代わりにT-SQLを使用する必要があります。
この記事では、T-SQLを使用するときにSQLServerエージェントジョブのリストを返すための3つのオプションを紹介します。
オプション
次のオプションを使用して、T-SQLでSQLServerエージェントジョブのリストを返すことができます。
- オプション1 :
sp_help_job
を実行します ストアドプロシージャ。 - オプション2 :
sysjobs_view
をクエリします ビュー。 - オプション3 :
sysjobs
をクエリします 直接テーブル。
これらのオプションはすべてmsdbにあります したがって、そのデータベースで実行する必要があります。 msdbに切り替えることでそれを行うことができます 最初にデータベースを作成するか、オブジェクトを適切に修飾します(例:msdb.dbo.sysjobs_view
。
オプション1:sp_help_job
sp_help_job
を使用する場合 SQL Serverエージェントジョブのリストを返すには、引数なしで実行するだけです。
このように:
USE msdb;
EXEC sp_help_job;
この場合、 msdbに切り替えました データベースを最初に使用します。つまり、データベース名とスキーマでプロシージャを完全に修飾する必要はありませんでした。
SSMSを使用してテスト環境で実行すると次のようになります。
特定のジョブを返す
同じストアドプロシージャを使用して、これらのジョブのいずれかの詳細を返すことができます。これを行うと、すべてのジョブを一覧表示する場合よりもはるかに詳細な情報が得られます。
仕事の詳細を取得するには、仕事の名前またはIDを入力する必要があります。
次に例を示します:
EXEC sp_help_job
@job_name = 'SqlAgentTest';
結果:
これにより、ジョブ、およびジョブステップ、スケジュール、ターゲットサーバーが一覧表示されます。
IDを使用する場合のコードの例を次に示します。
EXEC sp_help_job
@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';
IDを使用する場合、必要に応じてパラメータ名を省略できます。
例:
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';
構文
sp_help_job
の完全な構文 このようになります:
sp_help_job { [ @job_id = ] job_id
[ @job_name = ] 'job_name' }
[ , [ @job_aspect = ] 'job_aspect' ]
[ , [ @job_type = ] 'job_type' ]
[ , [ @owner_login_name = ] 'login_name' ]
[ , [ @subsystem = ] 'subsystem' ]
[ , [ @category_name = ] 'category' ]
[ , [ @enabled = ] enabled ]
[ , [ @execution_status = ] status ]
[ , [ @date_comparator = ] 'date_comparison' ]
[ , [ @date_created = ] date_created ]
[ , [ @date_last_modified = ] date_modified ]
[ , [ @description = ] 'description_pattern' ]
sp_help_job
については、Microsoftのドキュメントを参照してください。 各パラメータの説明と、それぞれが受け入れる値について説明します。
オプション2:sysjobs_view
表示
sysjobs_view
を使用できます SQLServerエージェントジョブのリストを返します。
例:
SELECT * FROM msdb.dbo.sysjobs_view;
この場合、ビュー名をデータベースとスキーマで修飾しました。
このビューは、sp_help_job
と同様の(ただしわずかに異なる)結果セットを返します。 引数なしで使用した場合のストアドプロシージャ。
ステップやスケジュールなどのジョブの詳細が必要な場合は、sysjobsteps
などの他のテーブルと結合する必要があります 、sysjobschedules
、sysjobactivity
、sysjobhistory
、など。
これは、sysjobsteps
と結合する例です。 テーブル:
SELECT
jv.name,
jv.description,
jv.start_step_id,
js.step_id,
js.step_name
FROM msdb.dbo.sysjobs_view jv
LEFT JOIN msdb.dbo.sysjobsteps js
ON jv.job_id = js.job_id;
テスト環境での結果は次のとおりです。
これは左結合であるため、ステップがないジョブが含まれます(NULL
を参照) step_id
で およびstep_name
TestJob
というジョブの列 )。
ステップのあるジョブだけに制限するには、内部結合を使用します。
オプション3:sysjobs
表
sysjobs
に直接移動する例を次に示します。 テーブル:
SELECT * FROM msdb.dbo.sysjobs;
ビューと同様に、ステップやスケジュールなどのジョブの詳細が必要な場合は、sysjobsteps
などの他のテーブルと結合する必要があります。 、sysjobschedules
、sysjobactivity
、sysjobhistory
、など。
通常、テーブルを直接クエリするのではなく、ビューをクエリすることをお勧めします。