Ejecución programada del procedimiento almacenado en SQL server
¿Es posible configurar de alguna manera Microsoft SQL Server para ejecutar un procedimiento almacenado de forma regular?
8 answers
Sí, en MS SQL Server, puede crear trabajos programados. En SQL Management Studio, vaya al servidor, expanda el elemento Agente de SQL Server y, finalmente, la carpeta Trabajos para ver, editar y agregar trabajos programados.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-14 16:20:16
Si se utiliza MS SQL Server Express Edition, el agente de SQL Server no está disponible. Encontré lo siguiente trabajado para todas las ediciones:
USE Master
GO
IF EXISTS( SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[MyBackgroundTask]')
AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[MyBackgroundTask]
GO
CREATE PROCEDURE MyBackgroundTask
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- The interval between cleanup attempts
declare @timeToRun nvarchar(50)
set @timeToRun = '03:33:33'
while 1 = 1
begin
waitfor time @timeToRun
begin
execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure];
end
end
END
GO
-- Run the procedure when the master database starts.
sp_procoption @ProcName = 'MyBackgroundTask',
@OptionName = 'startup',
@OptionValue = 'on'
GO
Algunas notas:
- Vale la pena escribir una entrada de auditoría en algún lugar para que pueda ver que la consulta realmente se ejecutó.
- El servidor necesita reiniciar una vez para asegurarse de que el script se ejecute la primera vez.
- Una pregunta relacionada es: Cómo ejecutar un procedimiento almacenado todos los días en SQL Server Express Edición?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:41
Sí, si utiliza el agente SQL Server.
Abra Enterprise Manager y vaya a la carpeta de administración bajo la instancia de SQL Server que le interesa. Allí verá el agente de SQL Server, y debajo verá una sección de Trabajos.
Aquí puede crear un nuevo trabajo y verá una lista de pasos que necesitará crear. Cuando crea un nuevo paso, puede especificar el paso para ejecutar realmente un procedimiento almacenado (escriba el script TSQL). Elija la base de datos, y luego para la sección de comandos ponga algo como:
exec MyStoredProcedure
Ese es el resumen, publique aquí si necesita más consejos.
[En realidad pensé que podría entrar primero en este, chico estaba equivocado :)]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-13 14:35:44
Probablemente no sea la respuesta que está buscando, pero me parece más útil simplemente usar El Programador de tareas de Windows Server
Puede utilizar directamente el comando sqlcmd.exe -S "." -d YourDataBase -Q "exec SP_YourJob"
O incluso crear un archivo .bat
. Por lo tanto, incluso puede hacer clic 2 veces en la tarea bajo demanda.
Esto también se ha abordado en este AQUÍ
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:25
Agregaré una cosa: donde estoy, solíamos tener un montón de trabajos por lotes que se ejecutaban todas las noches. Sin embargo, nos estamos alejando de eso para usar una aplicación cliente programada en tareas programadas de Windows que inicia cada trabajo. Hay (al menos) tres razones para esto:
- Tenemos algunos programas de consola que también necesitan ejecutarse todas las noches. De esta manera, todas las tareas programadas pueden estar en un solo lugar. Por supuesto, esto crea un único punto de error, pero si los trabajos de consola no se ejecutan vamos a perder un día de trabajo al día siguiente de todos modos.
- El programa que inicia los trabajos captura mensajes de impresión y errores del servidor y los escribe en un registro de aplicación común para todos nuestros procesos por lotes. Hace que el registro de los trabajos sql sea mucho más simple.
- Si alguna vez necesitamos actualizar el servidor (y esperamos hacerlo pronto) no necesitamos preocuparnos por mover los trabajos. Solo vuelve a apuntar la aplicación una vez.
Es un verdadero corto VB.Net aplicación: I puede código postal si alguien está interesado.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-14 14:50:59
Usando Management Studio-puede crear un trabajo (agente de unter SQL Server) Un trabajo puede incluir varios pasos desde scripts T-SQL hasta Paquetes SSIS
Jeb fue más rápido;)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-13 14:28:32
Usted podría utilizar Agente de Servicio de SQL Server para crear un mecanismo a medida.
Idea (simplificada):
-
Escribir un procedimiento almacenado/disparador que inicia una conversación ( INICIAR DIÁLOGO ) como bucle invertido (DE mi_servicio A mi_servicio) - obtener controlador de conversación
DECLARE @dialog UNIQUEIDENTIFIER; BEGIN DIALOG CONVERSATION @dialog FROM SERVICE [name] TO SERVICE 'name' ...;
-
Iniciar el temporizador de conversación
DECLARE @time INT; BEGIN CONVERSATION TIMER (@dialog) TIMEOUT = @time;
-
Después de un número especificado de segundos, se enviará un mensaje a un servicio. Será encolerizado con cola asociada.
CREATE QUEUE queue_name WITH STATUS = ON, RETENTION = OFF , ACTIVATION (STATUS = ON, PROCEDURE_NAME = <procedure_name> , MAX_QUEUE_READERS = 20, EXECUTE AS N'dbo') , POISON_MESSAGE_HANDLING (STATUS = ON)
Procedure ejecutará un código específico y un temporizador reanimable para que se dispare de nuevo.
Puede encontrar una solución completamente horneada (T-SQL) escrita por Michał Gołoś llamada Programador de Tareas
Puntos clave del blog:
Ventajas:
- Soportado en cada versión (de Express a Enterprise). El trabajo de agente de SQL Server no está disponible para SQL Server Express
- Ámbito a nivel de base de datos. Puede mover fácilmente la base de datos con tareas asociadas (especialmente cuando tiene que mover alrededor de 100 trabajos de un enviromnent a otro)
- Se necesitan privilegios más bajos para ver/manipular tareas(nivel de base de datos)
Distinción propuesta:
Agente de SQL Server (mantenimiento):
- copias de seguridad
- index / statistics reconstruye
- replicación
Programador de tareas (procesos de negocio):
- eliminación datos antiguos
- preagregaciones / nuevos cálculos cíclicos
- desnormalización
Cómo configurarlo:
- obtenga el código fuente de la sección: "Do pobrania" - Para descargar (habilitar broker/configurar esquema tsks/tabla de configuración + disparadores + procedimiento almacenado)/configurar cosas broker)
- configure la tabla de configuración
[tsks].[tsksx_task_scheduler]
para agregar nuevas tareas (los nombres de las columnas son auto-descriptivos, incluida la tarea de ejemplo)
Advertencia: Blog es escrito en polaco, pero el código fuente asociado está en inglés y es fácil de seguir.
Advertencia 2: Antes de usarlo, asegúrese de haberlo probado en un entorno que no sea de producción.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-30 15:12:48
Debería mirar un trabajo programado usando el agente de SQL Server.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-13 14:28:54