como agendar um trabalho para consulta sql para executar diariamente?

121

Preciso saber como fazer uma consulta SQL ser executada diariamente usando um trabalho do SQL Server Agent, com as definições de configuração mínimas necessárias.

Bobj-C
fonte
qual versão do SQL Server você está usando?
Faber
1
Aqui está a solução para a edição expressa: stackoverflow.com/a/7201189/259881
HasanG

Respostas:

164
  1. Expanda o nó do SQL Server Agent e clique com o botão direito do mouse no nó Trabalhos no SQL Server Agent e selecione 'New Job'

  2. Na 'New Job'janela, digite o nome do trabalho e uma descrição na 'General'guia.

  3. Selecione 'Steps'no lado esquerdo da janela e clique 'New'na parte inferior.

  4. Na 'Steps'janela, insira um nome de etapa e selecione o banco de dados no qual deseja que a consulta seja executada.

  5. Cole o comando T-SQL que deseja executar na janela Comando e clique em 'OK'.

  6. Clique no 'Schedule'menu à esquerda da janela Novo Trabalho e insira as informações de programação (por exemplo, diariamente e um horário).

  7. Clique 'OK'- e deve ser isso.

(Existem, é claro, outras opções que você pode adicionar - mas eu diria que é o mínimo necessário para configurar e programar um trabalho)

L-Note
fonte
como fazer isso no sql server express? o agente vem com sql server express com serviços avançados '?'
Bilal Fazlani
6
Nem é preciso dizer que, dependendo de quem você faz logon, talvez não consiga ver o nó do SQL Server Agent ... Nem todo mundo faz logon como sa. Mais informações (bastante secas) aqui .. msdn.microsoft.com/en-us/library/ms188283.aspx
Fetchez la vache
se o nó do SQL Server Agent não for expansível com um rótulo "Agent XPs disabled", execute este código sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Agent XPs', 1; GO RECONFIGURE GO Explicação está neste link: msdn.microsoft.com/en-us/library/ms178127.aspx
Barry Guvenkaya
4
Talvez usando scripting BAT, CMD, Powershell para fazê-lo programaticamente
Kiquenet
115

Fiz um GIF animado das etapas da resposta aceita. Isto é do MSSQL Server 2012

Agendar trabalho SQL

S.Mason
fonte
8
Um GIF - que criativo! :)
Zeek2
9
Esta deve ser a resposta mais votada em stackoverflow.!
Goutham Anush
1
É necessário fazer o login com sa? Não estou fazendo login com sa e não vi o agente de servidor sql. Acho que não tenho direitos suficientes para ver isso.
Alper
1
Para ver a área do SQL Server Agent na árvore de menu, o usuário com o qual você está conectado precisa das permissões corretas no banco de dados MSDB (MSDB é um banco de dados interno que o SSMS usa para coisas como permissões). No explorador de árvore principal, vá para Segurança> Logins> seu-nome de usuário> clique com o botão direito> propriedades> mapeamentos de usuários> verifique msdb> e, abaixo, verifique SQLAgentOperatorRole
S.Mason
19

Para fazer isso em t-sql, você pode usar os seguintes procedimentos armazenados do sistema para agendar um trabalho diário. Este exemplo é programado diariamente à 1h. Consulte a ajuda da Microsoft para obter detalhes sobre a sintaxe dos procedimentos armazenados individuais e o intervalo válido de parâmetros.

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
Doug Lampe
fonte
2
impressionante. exatamente o que eu preciso. Obrigado :)
AJ.
9

Usando T-SQL: Meu trabalho está executando o procedimento armazenado. Você pode alterar facilmente @commandpara executar seu 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 ;
efysis
fonte
-1

Aqui está um exemplo de código:

Exec sp_add_schedule
    @schedule_name = N'SchedulName' 
    @freq_type = 1
    @active_start_time = 08300
gangster
fonte
21
adicionar uma explicação de seu código em sua resposta geralmente é uma boa ideia (mesmo que seja aparente para você).
Nathan Hughes
Esta resposta não contém explicação suficiente. Sem explicação suficiente, os leitores não podem entender esta resposta.
Jino Shaji
-2

se você quiser backup diário // seguinte armazenamento de script sql em 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

abra o agendador de tarefas

criar tarefa-> selecionar Triggersguia Selecionar New.

Botão Selecionar botão de rádio diário

clique no Okbotão

em seguida, clique na Actionguia Selecionar novo.

Botão Coloca "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE"-S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"na caixa de texto do programa / script (certifique-se de que corresponda ao caminho dos seus arquivos e coloque o caminho entre aspas em iniciar-> caixa de pesquisa e se encontrar, clique nele e veja se o backup está lá ou não )

- o caminho acima pode ser instado 100 gravação 90 "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"

então clique no botão ok

o Script será executado na hora que você selecionar na guia Trigger diariamente

Aproveite.............

Pravin Dukare
fonte