142 votes

Comment puis-je programmer une tâche pour exécuter une requête SQL quotidiennement ?

J'ai besoin de savoir comment faire en sorte qu'une requête SQL soit exécutée quotidiennement à l'aide d'une tâche d'agent SQL Server, avec les paramètres de configuration minimaux requis.

1 votes

Voici la solution pour l'édition express : stackoverflow.com/a/7201189/259881

183voto

L-Note Points 496
  1. Développez le nœud SQL Server Agent et faites un clic droit sur le nœud Jobs dans SQL Server Agent et sélectionnez 'New Job'

  2. Dans le 'New Job' saisissez le nom de la tâche et une description dans le champ 'General' onglet.

  3. Sélectionnez 'Steps' sur le côté gauche de la fenêtre et cliquez sur 'New' en bas.

  4. Dans le 'Steps' saisissez un nom d'étape et sélectionnez la base de données dans laquelle vous souhaitez que la requête soit exécutée.

  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 'Schedule' à gauche de la fenêtre Nouveau travail et saisissez les informations relatives au calendrier (par exemple, un jour et une heure).

  7. Cliquez sur 'OK' - et ça devrait être tout.

(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 configurer et planifier un travail).

0 votes

Comment faire cela sur sql server express ? l'agent est-il livré avec sql server express avec des services avancés' ?'

7 votes

Il va sans dire que selon l'identité sous laquelle vous vous connectez, il se peut que vous ne puissiez pas du tout voir le nœud de l'agent SQL Server... Tout le monde ne se connecte pas en tant que sa. Plus d'informations (plutôt arides) ici... msdn.microsoft.com/fr/us/library/ms188283.aspx

0 votes

Si le nœud Agent du serveur SQL n'est pas extensible avec une étiquette "Agent XPs disabled", exécutez ce code sp_configure 'show advanced options', 1 ; GO RECONFIGURE ; GO sp_configure 'Agent XPs', 1 ; GO RECONFIGURE GO L'explication se trouve sous ce lien : msdn.microsoft.com/fr/us/library/ms178127.aspx

156voto

S.Mason Points 1298

J'ai fait un GIF animé des étapes de la réponse acceptée. Il s'agit de MSSQL Server 2012

Schedule SQL Job

1 votes

Est-il nécessaire de se connecter avec sa ? Je ne suis pas connecté avec sa et je ne vois pas l'agent sql server. Je pense que je n'ai pas assez de droits pour le voir.

2 votes

Pour voir la zone de l'agent SQL Server dans l'arborescence des menus, l'utilisateur sous lequel vous êtes connecté doit avoir les permissions correctes sur la base de données MSDB (MSDB est une base de données intégrée que SSMS utilise pour des choses comme les permissions). Depuis l'explorateur de l'arbre principal, allez dans Sécurité > Logins > votre nom d'utilisateur > clic droit > propriétés > mappages d'utilisateurs > vérifiez msdb > puis en dessous vérifiez SQLAgentOperatorRole.

22voto

Doug Lampe Points 506

Pour ce faire, en t-sql, vous pouvez utiliser les procédures stockées système suivantes pour planifier une tâche quotidienne. Cet exemple planifie chaque jour à 1 heure du matin. Consultez l'aide de Microsoft pour plus de détails sur la syntaxe des procédures stockées individuelles et sur les plages de paramètres valides.

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

12voto

efysis Points 206

J'utilise T-SQL : Mon travail consiste à exécuter 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 ;

1voto

pravin Dukare Points 1

Si vous voulez une sauvegarde journalière // suivant sql script stocker en C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql

DECLARE @pathName NVARCHAR(512),
 @databaseName NVARCHAR(512) SET @databaseName = 'Databasename' SET @pathName = 'C:\DBBackup\DBData\DBBackUp' + Convert(varchar(8), GETDATE(), 112) + '_' + Replace((Convert(varchar(8), GETDATE(), 108)),':','-')+ '.bak' BACKUP DATABASE @databaseName TO DISK = @pathName WITH NOFORMAT, 
INIT, 
NAME = N'', 
SKIP, 
NOREWIND, 
NOUNLOAD, 
STATS = 10 
GO

ouvrir le planificateur de tâches

créer une tâche-> sélectionner Triggers onglet Sélectionner New .

Bouton Select Daily Bouton radio

cliquez sur Ok Bouton

puis cliquez sur Action onglet Sélectionnez Nouveau.

Mise en place du bouton "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql" dans la boîte de texte programme/script (assurez-vous que le chemin de vos fichiers correspond et mettez le chemin entre guillemets dans la boîte de recherche start-> et s'il est trouvé alors cliquez dessus et voyez si la sauvegarde est là ou non)

-- le chemin ci-dessus peut être remplacé par 100 écrire 90 "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"

puis cliquez sur le bouton ok

le script s'exécutera au moment que vous sélectionnez dans l'onglet Trigger sur une base quotidienne

profitez-en.............

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X