web-dev-qa-db-ja.com

SQLクエリのジョブを毎日実行するようにスケジュールする方法は?

最小限必要な構成設定で、SQL Serverエージェントジョブを使用してSQLクエリを毎日実行する方法を知る必要があります。

100
Bobj-C
  1. [SQL Serverエージェント]ノードを展開し、SQL Serverエージェントの[ジョブ]ノードを右クリックして、['New Job']を選択します

  2. ['New Job']ウィンドウで、['General']タブにジョブの名前と説明を入力します。

  3. ウィンドウの左側で'Steps'を選択し、下部にある'New'をクリックします。

  4. 'Steps'ウィンドウで、ステップ名を入力し、クエリを実行するデータベースを選択します。

  5. 実行するT-SQLコマンドをコマンドウィンドウに貼り付け、'OK'をクリックします。

  6. [新しいジョブ]ウィンドウの左側にある['Schedule']メニューをクリックして、スケジュール情報(例:毎日と時間)を入力します。

  7. ['OK']をクリックします。

(もちろん、追加できる他のオプションもありますが、ジョブをセットアップしてスケジュールするために必要な最低限のものです)

145
L-Note

受け入れられた回答の手順のアニメーションGIFを作成しました。これはMSSQL Server 2012のものです

Schedule SQL Job

66
S.Mason

T-sqlでこれを行うには、次のシステムストアドプロシージャを使用して、毎日のジョブをスケジュールできます。この例では、毎日午前1時にスケジュールを設定します。個々のストアドプロシージャの構文とパラメーターの有効範囲の詳細については、Microsoftヘルプを参照してください。

DECLARE @job_name NVARCHAR(128), @description NVARCHAR(512), @owner_login_name NVARCHAR(128), @database_name NVARCHAR(128);

SET @job_name = N'Some Title';
SET @description = N'Periodically do something';
SET @owner_login_name = N'login';
SET @database_name = N'Database_Name';

-- Delete job if it already exists:
IF EXISTS(SELECT job_id FROM msdb.dbo.sysjobs WHERE (name = @job_name))
BEGIN
    EXEC msdb.dbo.sp_delete_job
        @job_name = @job_name;
END

-- Create the job:
EXEC  msdb.dbo.sp_add_job
    @job_name=@job_name, 
    @enabled=1, 
    @notify_level_eventlog=0, 
    @notify_level_email=2, 
    @notify_level_netsend=2, 
    @notify_level_page=2, 
    @delete_level=0, 
    @description=@description, 
    @category_name=N'[Uncategorized (Local)]', 
    @owner_login_name=@owner_login_name;

-- Add server:
EXEC msdb.dbo.sp_add_jobserver @job_name=@job_name;

-- Add step to execute SQL:
EXEC msdb.dbo.sp_add_jobstep
    @job_name=@job_name,
    @step_name=N'Execute SQL', 
    @step_id=1, 
    @cmdexec_success_code=0, 
    @on_success_action=1, 
    @on_fail_action=2, 
    @retry_attempts=0, 
    @retry_interval=0, 
    @os_run_priority=0, 
    @subsystem=N'TSQL', 
    @command=N'EXEC my_stored_procedure; -- OR ANY SQL STATEMENT', 
    @database_name=@database_name, 
    @flags=0;

-- Update job to set start step:
EXEC msdb.dbo.sp_update_job
    @job_name=@job_name, 
    @enabled=1, 
    @start_step_id=1, 
    @notify_level_eventlog=0, 
    @notify_level_email=2, 
    @notify_level_netsend=2, 
    @notify_level_page=2, 
    @delete_level=0, 
    @description=@description, 
    @category_name=N'[Uncategorized (Local)]', 
    @owner_login_name=@owner_login_name, 
    @notify_email_operator_name=N'', 
    @notify_netsend_operator_name=N'', 
    @notify_page_operator_name=N'';

-- Schedule job:
EXEC msdb.dbo.sp_add_jobschedule
    @job_name=@job_name,
    @name=N'Daily',
    @enabled=1,
    @freq_type=4,
    @freq_interval=1, 
    @freq_subday_type=1, 
    @freq_subday_interval=0, 
    @freq_relative_interval=0, 
    @freq_recurrence_factor=1, 
    @active_start_date=20170101, --YYYYMMDD
    @active_end_date=99991231, --YYYYMMDD (this represents no end date)
    @active_start_time=010000, --HHMMSS
    @active_end_time=235959; --HHMMSS
12
Doug Lampe

T-SQLの使用:私のジョブはストアドプロシージャを実行しています。 @commandを簡単に変更して、SQLを実行できます。

EXEC msdb.dbo.sp_add_job  
   @job_name = N'MakeDailyJob',   
   @enabled = 1,   
   @description = N'Procedure execution every day' ; 

 EXEC msdb.dbo.sp_add_jobstep  
    @job_name = N'MakeDailyJob',   
    @step_name = N'Run Procedure',   
    @subsystem = N'TSQL',   
    @command = 'exec BackupFromConfig';

 EXEC msdb.dbo.sp_add_schedule  
    @schedule_name = N'Everyday schedule',   
    @freq_type = 4,  -- daily start
    @freq_interval = 1,
    @active_start_time = '230000' ;   -- start time 23:00:00

 EXEC msdb.dbo.sp_attach_schedule  
   @job_name = N'MakeDailyJob',  
   @schedule_name = N'Everyday schedule' ;

 EXEC msdb.dbo.sp_add_jobserver  
   @job_name = N'MakeDailyJob',  
   @server_name = @@servername ;
7
efysis

サンプルコードを次に示します。

Exec sp_add_schedule
    @schedule_name = N'SchedulName' 
    @freq_type = 1
    @active_start_time = 08300
0
gangster