¿Se puede hacer un trigger que ejecute un job?

Rosal?
20 de Julio del 2005
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

GabrielSR2004
20 de Julio del 2005

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]


















Rosal?
20 de Julio del 2005
Muchas gracias Gabriel!,
Parece que ha funcionado.
Gracias por tus aclaraciones.

Rosalía