como agendar um trabalho para consulta sql para executar diariamente?


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)


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


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

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 ;

-1

Aqui está um exemplo de código:

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

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.............

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.