¿Se puede hacer un trigger que ejecute un job?
Buenas tardes,
Una simple preguntita:
Tengo un job que se llama "miJob"
Desde la consola, funciona: exec msdb.dbo.sp_start_job @job_name = 'miJob'
Ahora, ¿Se puede crear un trigger que me lance el job al hacer un insert?
Mi trigger es el que sigue:
CREATE TRIGGER User_Update
ON C_Users
AFTER INSERT
AS
BEGIN
IF @@RowCount = 0 RETURN
EXEC msdb.dbo.sp_start_job @job_name = 'miJob'
END
Se supone que para cada inserción en la tabla C_Users, quiero que se realice el job. No se si me he explicado. No me da error pero no me funciona.
Muchas gracias,
Rosalía Contreras
Una simple preguntita:
Tengo un job que se llama "miJob"
Desde la consola, funciona: exec msdb.dbo.sp_start_job @job_name = 'miJob'
Ahora, ¿Se puede crear un trigger que me lance el job al hacer un insert?
Mi trigger es el que sigue:
CREATE TRIGGER User_Update
ON C_Users
AFTER INSERT
AS
BEGIN
IF @@RowCount = 0 RETURN
EXEC msdb.dbo.sp_start_job @job_name = 'miJob'
END
Se supone que para cada inserción en la tabla C_Users, quiero que se realice el job. No se si me he explicado. No me da error pero no me funciona.
Muchas gracias,
Rosalía Contreras
Hola Rosalia
Te paso un ejemplillo el cual
conste que esta probado
/*
Te paso el Scrip del JOB para que lo ejecutes
-- Script generated on 7/14/2005 12:33 PM
-- By: sa
-- Server: INFLABOD
BEGIN TRANSACTION
DECLARE @JobID BINARY(16)
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]') < 1
EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'
-- Delete the job with the same name (if it exists)
SELECT @JobID = job_id
FROM msdb.dbo.sysjobs
WHERE (name = N'BorraGSRTienda')
IF (@JobID IS NOT NULL)
BEGIN
-- Check if the job is a multi-server job
IF (EXISTS (SELECT *
FROM msdb.dbo.sysjobservers
WHERE (job_id = @JobID) AND (server_id <> 0)))
BEGIN
-- There is, so abort the script
RAISERROR (N'Unable to import job ''BorraGSRTienda'' since there is already a multi-server job with this name.', 16, 1)
GOTO QuitWithRollback
END
ELSE
-- Delete the [local] job
EXECUTE msdb.dbo.sp_delete_job @job_name = N'BorraGSRTienda'
SELECT @JobID = NULL
END
BEGIN
-- Add the job
EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name = N'BorraGSRTienda', @owner_login_name = N'sa', @description = N'No description available.', @category_name = N'[Uncategorized (Local)]', @enabled = 1, @notify_level_email = 0, @notify_level_page = 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level= 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
-- Add the job steps
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 1, @step_name = N'BorraGSRTienda', @command = N'exec Borra_GSR_Tienda', @database_name = N'AFIPBABOD80', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0, @on_fail_action = 2
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
-- Add the job schedules
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID, @name = N'BorraGSRTienda', @enabled = 1, @freq_type = 4, @active_start_date = 20050714, @active_start_time = 0, @freq_interval = 1, @freq_subday_type = 8, @freq_subday_interval = 1, @freq_relative_interval = 0, @freq_recurrence_factor = 0, @active_end_date = 99991231, @active_end_time = 235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
-- Add the Target Servers
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
*/
If Exists(Select Name
From Sysobjects(Nolock)
Where Name = 'ejemplo')
Drop Table ejemplo
Go
Create Table ejemplo
(Campo1 Int)
Go
If Exists(Select Name
From Sysobjects(Nolock)
Where Name = 'GSR_Tienda')
Drop Table GSR_Tienda
Go
Create Table GSR_Tienda
(
Tienda Char(2),
Nombre Char(50)
)
Go
Insert GSR_Tienda values('10','AAAAAAAAAA')
Insert GSR_Tienda values('20','BBBBBBBBBB')
Insert GSR_Tienda values('30','CCCCCCCCCC')
Insert GSR_Tienda values('40','DDDDDDDDDD')
Insert GSR_Tienda values('50','EEEEEEEEEE')
Insert GSR_Tienda values('60','FFFFFFFFFF')
Insert GSR_Tienda values('70','GGGGGGGGGG')
Insert GSR_Tienda values('80','HHHHHHHHHH')
Go
If Exists(Select Name
From Sysobjects(Nolock)
Where Name = 'Trigger_Insert_ejemplo')
Drop Trigger Trigger_Insert_ejemplo
Go
CREATE TRIGGER Trigger_Insert_ejemplo ON ejemplo
FOR Insert
AS
Begin
EXEC msdb.dbo.sp_start_job @job_name = 'BorraGSRTienda'
End
go
select * From GSR_Tienda (Nolock)
go
/*
Si Haces un Insert sobre esta tabla borra
el contenido de la tabla GSR_Tienda
insert ejemplo values(1)
Si lo checas se borro la Tabla
select * From GSR_Tienda (Nolock)
*/
Si tienes una duda me la comentas
P.D. Espero que te sirva
---------------------------------------------
Gabriel Sanchez
[email protected]