¿Cómo programar un trabajo para que la consulta SQL se ejecute diariamente?

Respuestas:

164
  1. Expanda el nodo del Agente SQL Server y haga clic con el botón derecho en el nodo Trabajos en el Agente SQL Server y seleccione 'New Job'

  2. En la 'New Job'ventana ingrese el nombre del trabajo y una descripción en la 'General'pestaña.

  3. Seleccione 'Steps'en el lado izquierdo de la ventana y haga clic 'New'en la parte inferior.

  4. En la 'Steps'ventana, ingrese un nombre de paso y seleccione la base de datos en la que desea que se ejecute la consulta.

  5. Pegue el comando T-SQL que desea ejecutar en la ventana de comandos y haga clic en 'OK'.

  6. Haga clic en el 'Schedule'menú a la izquierda de la ventana Nuevo trabajo e ingrese la información del programa (por ejemplo, diariamente y una hora).

  7. Haga clic 'OK', y eso debería ser todo.

(Por supuesto, hay otras opciones que puede agregar, pero yo diría que es lo mínimo que necesita para configurar y programar un trabajo)

L-Note
fuente
¿Cómo hacer eso en SQL Server Express? ¿El agente viene con SQL Server Express con servicios avanzados?
Bilal Fazlani
6
No hace falta decir que, dependiendo de con quién inicie sesión, es posible que no pueda ver el nodo del Agente SQL Server en absoluto ... No todos inician sesión como sa. Más información (bastante seca) aquí ... msdn.microsoft.com/en-us/library/ms188283.aspx
Fetchez la vache
si el nodo del Agente SQL Server no se puede expandir con una etiqueta "Agente XP deshabilitado", ejecute este código sp_configure 'mostrar opciones avanzadas', 1; IR A RECONFIGURAR; GO sp_configure 'Agent XPs', 1; GO RECONFIGURE GO La explicación se encuentra en este enlace: msdn.microsoft.com/en-us/library/ms178127.aspx
Barry Guvenkaya
4
Tal vez usando secuencias de comandos BAT, CMD, Powershell para hacerlo mediante programación
Kiquenet
115

Hice un GIF animado de los pasos en la respuesta aceptada. Esto es de MSSQL Server 2012

Programar trabajo SQL

S. Mason
fuente
8
Un GIF, ¡qué creativo! :)
Zeek2
9
Esta debería ser la respuesta más votada en stackoverflow.!
Goutham Anush
1
¿Es necesario iniciar sesión con sa? No inicié sesión con sa y no vi el agente del servidor SQL. Creo que no tengo suficientes derechos para verlo.
Alper
1
Para ver el área del Agente SQL Server en el árbol del menú, el usuario con el que inició sesión necesita los permisos correctos en la base de datos MSDB (MSDB es una base de datos incorporada que SSMS usa para cosas como permisos). Desde el explorador del árbol principal, vaya a Seguridad> Inicios de sesión> su-nombre de usuario> haga clic derecho> propiedades> asignaciones de usuarios> verifique msdb> luego, a continuación, verifique SQLAgentOperatorRole
S.Mason
19

Para hacer esto en t-sql, puede usar los siguientes procedimientos almacenados del sistema para programar un trabajo diario. Este ejemplo programa todos los días a la 1:00 AM. Consulte la ayuda de Microsoft para obtener detalles sobre la sintaxis de los procedimientos almacenados individuales y el rango 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
fuente
2
increíble. exactamente lo que necesito. Gracias :)
AJ.
9

Usando T-SQL: Mi trabajo está ejecutando un procedimiento almacenado. Puede cambiar fácilmente @commandpara ejecutar su 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
fuente
-1

Aquí tienes un código de muestra:

Exec sp_add_schedule
    @schedule_name = N'SchedulName' 
    @freq_type = 1
    @active_start_time = 08300
gángster
fuente
21
agregar una explicación de su código en su respuesta suele ser una buena idea (incluso si es evidente para usted).
Nathan Hughes
Esta respuesta no contiene suficiente explicación. Sin una explicación suficiente, los lectores no pueden entender esta respuesta.
Jino Shaji
-2

si desea una copia de seguridad diaria // siguiendo la tienda de scripts sql 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

abre el programador de tareas

crear tarea-> seleccionar Triggerspestaña Seleccionar New.

Botón Seleccionar el botón de opción diario

haga clic en el Okbotón

luego haga clic en la Actionpestaña Seleccionar nuevo.

Botón Coloque "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE"-S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"en el cuadro de texto del programa / script (asegúrese de que coincida con la ruta de sus archivos y coloque la ruta entre comillas dobles en inicio-> cuadro de búsqueda y, si encuentra, haga clic en él y vea que la copia de seguridad está allí o no )

- la ruta anterior se puede insertar 100 escribir 90 "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"

luego haga clic en el botón Aceptar

la secuencia de comandos se ejecutará a tiempo que seleccione en la pestaña Disparador diariamente

disfrútala.............

pravin Dukare
fuente