web-dev-qa-db-fra.com

Comment planifier une tâche pour une requête SQL à exécuter quotidiennement?

J'ai besoin de savoir comment exécuter quotidiennement une requête SQL à l'aide d'un travail d'agent SQL Server, avec les paramètres de configuration minimum requis.

105
Bobj-C
  1. Développez le nœud Agent SQL Server, cliquez avec le bouton droit de la souris sur le nœud Travaux dans Agent SQL Server, puis sélectionnez 'New Job'.

  2. Dans la fenêtre 'New Job', entrez le nom du travail et une description dans l'onglet 'General'.

  3. Sélectionnez 'Steps' dans la partie gauche de la fenêtre et cliquez sur 'New' en bas.

  4. Dans la fenêtre 'Steps', entrez un nom d'étape et sélectionnez la base de données sur laquelle vous souhaitez exécuter la requête.

  5. Collez la commande T-SQL que vous souhaitez exécuter dans la fenêtre de commande et cliquez sur 'OK'.

  6. Cliquez sur le menu 'Schedule' à gauche de la fenêtre Nouvelle tâche et entrez les informations de planification (par exemple, quotidienne et une heure).

  7. Cliquez sur 'OK' - et ce devrait être le cas.

(Il y a bien sûr d'autres options que vous pouvez ajouter - mais je dirais que c'est le strict minimum dont vous avez besoin pour qu'un travail soit configuré et planifié)

149
L-Note

J'ai créé un GIF animé des étapes de la réponse acceptée. Ceci est de MSSQL Server 2012

Schedule SQL Job

70
S.Mason

Pour ce faire dans t-sql, vous pouvez utiliser les procédures stockées système suivantes pour planifier un travail quotidien. Cet exemple planifie quotidiennement à 1h00. Consultez l'aide de Microsoft pour plus de détails sur la syntaxe des procédures stockées individuelles et sur la plage de paramètres valide.

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
14
Doug Lampe

Utilisation de T-SQL: Mon travail exécute une procédure stockée. Vous pouvez facilement changer @command pour exécuter votre 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 ;
8
efysis

Voici un exemple de code:

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