sql >> データベース >  >> RDS >> Sqlserver

SQL Serverエージェントジョブ(T-SQL)のジョブステップを取得する3つの方法

    この記事では、T-SQLを使用するときにSQLServerエージェントジョブのステップを返すための3つのオプションを紹介します。

    オプション

    次のT-SQLオプションを使用して、SQLServerエージェントジョブのステップを返すことができます。

    • オプション1sp_help_jobを実行します ストアドプロシージャ。
    • オプション2sp_help_jobstepを実行します ストアドプロシージャ。
    • オプション3sysjobstepsをクエリします テーブル(およびsysjobs_viewと結合します もし必要なら)。

    これらのオプションはすべてmsdbにあります したがって、そのデータベースで実行する必要があります。 msdbに切り替えることでそれを行うことができます 最初にデータベースを作成するか、オブジェクトを適切に修飾します(例:msdb.dbo.sysjobsteps

    オプション1:sp_help_job

    sp_help_jobを呼び出すとき 引数なしで、単にジョブのリストを返します。ただし、ジョブの名前または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:sp_help_jobstep

    sp_help_jobstep ストアドプロシージャは、ジョブのステップを返すように特別に設計されています。しかし、それがすべてを返します。

    したがって、スケジュールやターゲットサーバーの内容などを表示したくない場合は、これが探しているものである可能性があります。

    sp_help_jobstepを渡すことができます ジョブ名またはそのID(両方ではない)。

    次に例を示します:

    EXEC sp_help_jobstep
    	@job_name = 'SqlAgentTest';

    そして、2段階のジョブでの結果は次のようになります。

    特定のステップのみを返す場合は、ステップIDを指定することもできます。ただし、どのジョブを対象とするかを(IDまたは名前で)指定する必要があります。

    ジョブの2番目のステップを指定する例を次に示します。

    EXEC sp_help_jobstep
    	@job_name = 'SqlAgentTest', 
    	@step_id = 2;

    ステップIDは、そのジョブに対して実際に存在する必要があります。たとえば、3のステップIDを指定します 上記のジョブの場合、エラーが発生します。

    オプション3:sysjobsteps

    もう1つのオプションは、sysjobstepsに対してクエリを実行することです。 テーブル。

    この表にはすべてのジョブのステップが含まれているため、特定のジョブのステップのみが必要な場合は、ジョブIDを渡す必要があります。

    sysjobstepsにクエリを実行する例を次に示します。 特定の仕事のステップの表:

    SELECT * FROM msdb.dbo.sysjobsteps
    WHERE job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';

    これにより、sp_help_jobstepと同様の結果が返されます。 手順。

    ジョブの詳細の一部(名前など)を返す場合は、sysjobsteps間で結合を実行できます。 およびsysjobs_view

    例:

    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というジョブの列 )。

    ステップのあるジョブだけに制限するには、内部結合を使用します。


    1. PL / SQL内にOracleDatabaseオブジェクト・タイプを作成することは可能ですか?

    2. データベース内のすべてのテーブルのドロップテーブルステートメントを生成する方法-SQLServer/T-SQLチュートリアルパート48

    3. SQL Serverを実行している2つのDockerコンテナ間にリンクサーバーを作成する(T-SQLの例)

    4. MySQLでテーブルの文字セットと照合を設定する方法