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.
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'
.
Dans la fenêtre 'New Job'
, entrez le nom du travail et une description dans l'onglet 'General'
.
Sélectionnez 'Steps'
dans la partie gauche de la fenêtre et cliquez sur 'New'
en bas.
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.
Collez la commande T-SQL que vous souhaitez exécuter dans la fenêtre de commande et cliquez sur 'OK'
.
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).
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é)
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
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 ;
Voici un exemple de code:
Exec sp_add_schedule
@schedule_name = N'SchedulName'
@freq_type = 1
@active_start_time = 08300