2012-04-10 31 views
7

tengo el código de abajo (sólo la parte que se necesita)Cómo pasar un parámetro a un SQL de empleo que ejecutar un procedimiento almacenado

EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'SomeStep', 
     @step_id=1, 
     @cmdexec_success_code=0, 
     @on_success_action=1, 
     @on_success_step_id=0, 
     @on_fail_action=2, 
     @on_fail_step_id=0, 
     @retry_attempts=0, 
     @retry_interval=0, 
     @os_run_priority=0, @subsystem=N'TSQL', 
     @command=N'exec [dbo].[PORT_Insert_Record] ''https://localhost''', 
     @database_name=N'MyDatabase', 
     @flags=0 

Ahora, quiero pasar el valor https://localhost en una variable y pasar al procedimiento almacenado (por alguna razón no puedo pasarlo dentro del SP).

así que traté

DECLARE @domainName varchar(max) 
DECLARE @sp varchar(max) 
SET @domainName ='https://localhost:' 
SET @sp ='exec [dbo].[PORT_Insert_Record]' + @domainName 

EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'InsertRecordIntoResellerOpportunities', 
     @step_id=1, 
     @cmdexec_success_code=0, 
     @on_success_action=1, 
     @on_success_step_id=0, 
     @on_fail_action=2, 
     @on_fail_step_id=0, 
     @retry_attempts=0, 
     @retry_interval=0, 
     @os_run_priority=0, @subsystem=N'TSQL', 
     @[email protected], 
     @database_name=N'MyDatabase', 
     @flags=0 

pero no está funcionando. También busco en la red cualquier idea/sintaxis, etc., pero no tengo suerte a partir de ahora.

¿Alguna idea?

+2

cómo es es ** ** NO FUNCIONA - Qué se obtiene un error ?? Si es así: ** ¿qué error **? ¿Se está ejecutando pero no está haciendo lo que espera que haga? Entonces: ¿qué ** está ** haciendo frente a lo que esperaba ** ... ...... debe proporcionar más detalles aquí! –

Respuesta

3

lo que está haciendo que @ReturnCode allí? ¿está declarado en alguna parte?

He intentado esto en un nuevo trabajo y funcionó:

DECLARE @domainName varchar(max) 
DECLARE @sp varchar(max) 
SET @domainName ='https://localhost:' 
SET @sp ='exec [dbo].[PORT_Insert_Record]' + @domainName 

    EXEC msdb.dbo.sp_add_jobstep @job_id=N'a756bfcb-2abf-4d7a-a871-85e234e7ef53', @step_name=N'Step 1', 
      @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', 
      @[email protected], 
      @database_name=N'master', 
      @flags=0 
    GO 
1

Creo que necesitas citar las comillas

SET @domainName ='https://localhost:' 
SET @sp ='exec [dbo].[PORT_Insert_Record] ''' + @domainName + '''' 
0

Debe escribir cualquier información en su secuencia de comandos. Los trabajos tienen sus propias sesiones. Cómo van a saber lo que era sus parámetros

Aquí está un ejemplo

--here is your existing parameters 
declare @dateparam date = '2017-10-19' 
declare @intparam int= 100 
declare @stringparam nvarchar(20)= 'hello' 

--now start write you sql job command 
declare @command nvarchar(max) 
set @command = N'declare @dateparam date =' + CAST(@dateparam AS NVARCHAR(20)) + CHAR(13) 
--+ CHAR(13) IS FOR LINEBREAK 
set @command = @command + N'declare @intparam date =' + CAST(@intparam AS NVARCHAR(20)) + CHAR(13) 
set @command = @command + N'declare @stringparam nvarchar(20) =' + @stringparam + CHAR(13) 
set @command = @command + N'exec dbo.my_store_procedure @dateparam, @intparam, @stringparam' 

--NOW YOUR COMMAND HAVE ALL informations 
EXEC msdb.dbo.sp_add_jobstep @job_id=N'a756bfcb-2abf-4d7a-a871-85e234e7ef53', @step_name=N'Step 1', 
     @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', 
     @[email protected], 
     @database_name=N'master', 
     @flags=0 
Cuestiones relacionadas