2012-04-10 7 views
7

mam poniższy kod (tylko część, która jest potrzebna)Jak przekazać parametr do SQL zadanie, które będzie wykonywał procedurę przechowywaną

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 

Teraz chcę przekazać wartość https://localhost do zmiennej i przejść do procedury przechowywanej (z jakiegoś powodu nie mogę go przekazać wewnątrz SP).

Więc próbowałem

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 

ale to nie działa. Również szukam w sieci dla każdego pomysłu/składni itp. .. ale bez powodzenia od teraz.

Wszelkie pomysły?

+2

Jak to jest ** ** NIE DZIAŁA - nie pojawi się błąd ?? Jeśli tak: ** jaki błąd ** ?? Czy to działa, ale nie robi tego, czego oczekujesz? Następnie: co ** robi **, co robi, a czego oczekiwałeś ** ...... musisz podać więcej szczegółów tutaj! –

Odpowiedz

3

co to @ReturnCode tam robi? czy jest gdzieś zadeklarowany?

Próbowałem to w nowej pracy i to działało:

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

myślę, że trzeba podwoić zacytować cudzysłów

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

Musisz pisać żadnych informacji do skryptu poleceń. Zadania mają własne sesje. Jak będą wiedzieli, jakie było twoje parametry

Oto przykład

--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 
Powiązane problemy