none
enviar parametros a un job RRS feed

  • Pregunta

  • saludos he encontrado este codigo en la web y creo que me podria ayudar,pero tengo algunos inconvenientes como ser como pasarle parametros al job, es decir en esta parte

    SET @codigo = ISNULL((SELECT (MAX(codigo)+1) FROM dbo.tabla1),1)    
    INSERT INTO dbo.tabla1 (codigo,tipo, datos, fechaNacimiento     )
    VALUES ( @codigo,    1,     0x00,         GETDATE()) 
    END

    no quiero hacer el insert en duro sinoi pasarle mis propios valores

    --CREATE DATABASE test; 
    --GO USE test;
    -- GO CREATE TABLE [dbo].[tabla1]
    -- (     [codigo] [int] NULL,   
    --   [tipo] [int] NULL,     
    --   [datos] [varbinary](max) NULL,    
    --    [fechaNacimiento] [datetime] NULL) 
    --    ON [PRIMARY] 
    alter PROCEDURE sp_async_execute
    (@sqlComand varchar(4000), 
    @jobname varchar(200) = null,
    @database varchar(200)= null,
     @owner varchar(200) = null )
    AS BEGIN   
    SET NOCOUNT ON;     
    declare @id uniqueidentifier    
    --Crear con un único nombre al 'job' si no es especificado    
    if @jobname is null set @jobname= 'async' 
    set @jobname = @jobname + '_' + convert(varchar(64),NEWID())      
    if @owner is null set @owner = 'sa'    
    --Crear un nuevo 'job', Obtenemos el 'job ID'   
    execute msdb..sp_add_job @jobname, @owner_login_name=@owner, @job_id=@id OUTPUT      
    --Especifica un 'job server'  para el 'job'    
    execute msdb..sp_add_jobserver @job_id=@id      
    --Especificar el primer paso para el 'job' - [Comando SQL, Procedimiento almacenado]    
    --(@on_success_action = 3 ... Ir al Siguiente paso(job step)     
    execute msdb..sp_add_jobstep @job_id=@id, @step_name='Step1', @command = @sqlComand,          
    @database_name = @database, @on_success_action = 3      
    --Especificar el primer paso para el 'job' - Elimina el 'job'    
    declare @deletecommand varchar(200)     
    set @deletecommand = 'execute msdb..sp_delete_job @job_name='''+@jobname+''''   
    execute msdb..sp_add_jobstep @job_id=@id, @step_name='Step2', @command = @deletecommand          
    --Iniciar el 'job'     
    execute msdb..sp_start_job @job_id=@id   
    END
    GO
    alter PROC sp_simple AS BEGIN   
    --Pausamos 10 segundos antes de ejecutar los script que le continuan    
    WAITFOR DELAY '00:00:10'    
    DECLARE @codigo INT  
    SET @codigo = ISNULL((SELECT (MAX(codigo)+1) FROM dbo.tabla1),1)     
    INSERT INTO dbo.tabla1 (codigo,tipo, datos, fechaNacimiento     ) 
    VALUES ( @codigo,    1,     0x00,         GETDATE())  
    END
    GO 
    alter PROC sp_callJob AS BEGIN   
    --El job se encarga de ejecutar al procedimiento almacenado sp_simple     
    execute sp_async_execute 'execute test.dbo.sp_simple',NULL,'test','sa'    
    --Continua sin nigún inconveniente el resto de lineas   
    SELECT codigo,tipo,datos,fechaNacimiento FROM dbo.tabla1 
    END
    GO

    martes, 27 de agosto de 2013 13:47

Respuestas

  • 1. La respuesta es que es imposible.

    2. Si de alguna razon te parece obligatorio, puedes pasar los atraves de una tabla dedicada.

    3. Lo mas importante: cuál es la razón de utilizar parametros?
    ¿Porque no ejecutas el procedimiento sp_simple directamente? Supongo que esperas a encontrar en dbo.tabla1 la salida del sp_simple, pero si lo ejecutas asicrónicamente - nunca estarás seguro que la vas a encontrar alla (¿que pasa si no?).
    La solución correcta de ejecutar un procedimiento asicrónicamente es con Service Broker, pero si utilizas una versión anterior a 2005 o no tienes tiempo y ganas de aprender este tema - puedes utilizar una tabla de parámetros.

    
    
    

    El castellano no es mi lengua materna. Discúlpenme por los errores gramaticales, y, si pueden, corríjanme en los comentarios, o por correo electrónico. ¡Muchas gracias! Blog: http://about.me/GeriReshef

    miércoles, 28 de agosto de 2013 3:35