¿Cómo puedo programar un trabajo para ejecutar una consulta SQL diariamente?
Necesito saber cómo hacer que una consulta SQL se ejecute diariamente usando un trabajo del Agente SQL Server, con los ajustes de configuración mínimos requeridos.
Expanda el nodo del Agente SQL Server y haga clic derecho en el nodo Trabajos en el Agente SQL Server y seleccione
'New Job'
En la
'New Job'
ventana ingrese el nombre del trabajo y una descripción en la'General'
pestaña.Seleccione
'Steps'
en el lado izquierdo de la ventana y haga clic'New'
en la parte inferior.En la
'Steps'
ventana, ingrese el nombre de un paso y seleccione la base de datos en la que desea ejecutar la consulta.Pegue el comando T-SQL que desea ejecutar en la ventana Comando y haga clic en
'OK'
.Haga clic en el
'Schedule'
menú a la izquierda de la ventana Nuevo trabajo e ingrese la información del horario (por ejemplo, diariamente y una hora).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)
Hice un GIF animado de los pasos de la respuesta aceptada. Esto es de MSSQL Server 2012.
Para hacer esto en t-sql, puede utilizar los siguientes procedimientos almacenados del sistema para programar un trabajo diario. Este ejemplo programa diariamente a la 1:00 a.m. 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
Usando T-SQL: Mi trabajo es ejecutar un procedimiento almacenado. Puede cambiar fácilmente @command
para 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 ;
si desea una copia de seguridad diaria // siguiendo el almacén 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
abrir el programador de tareas
crear tarea-> seleccionar Triggers
pestaña Seleccionar New
.
Botón Seleccionar botón de radio diario
haga clic Ok
en el botón
luego haga clic en Action
la pestañ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 hacer coincidir la ruta de sus archivos y coloque la ruta entre comillas dobles en inicio-> cuadro de búsqueda y, si lo encuentra, haga clic en él y vea si la copia de seguridad está allí o no). )
-- la ruta anterior puede estar insertada en 100, escribe 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
el script se ejecutará a tiempo, lo que seleccione en la pestaña Activador diariamente
disfrútala.............