2012-04-10 14 views
7

ho il codice qui sotto (solo la parte che è necessaria)Come passare un parametro a un processo SQL che eseguire una stored procedure

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 

Ora, voglio passare il valore https://localhost in una variabile e passare alla stored procedure (per qualche motivo non posso passarlo all'interno dell'SP).

Così ho provato

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 

ma non funziona. Cerco anche in rete per qualsiasi idea/sintassi, ecc., Ma senza fortuna al momento.

Qualche idea?

+2

Come è è ** NON FUNZIONANTE ** - si ottiene un errore ?? In tal caso: ** quale errore ** ?? Funziona ma non fa quello che ti aspetti che faccia? Quindi: cosa ** è ** che sta facendo vs. cosa hai ** aspettato ** ...... devi fornire maggiori dettagli qui! –

risposta

3

Che cos'è @ReturnCode facendo lì? è stato dichiarato da qualche parte?

ho provato questo su un nuovo lavoro e ha funzionato:

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

penso che è necessario fare doppio citare le virgolette

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

È necessario scrivere alcuna informazione sul suo script di comandi. I lavori hanno le loro sessioni. Come sapranno quello che era i parametri

Ecco un esempio

--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 
Problemi correlati