2012-04-10 19 views
7

Tôi có đoạn code dưới đây (chỉ có phần đó là cần thiết)Làm thế nào để vượt qua một tham số để một công việc SQL sẽ thực hiện một thủ tục lưu trữ

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 

Bây giờ, tôi muốn vượt qua giá trị https://localhost vào một biến và chuyển sang thủ tục đã lưu trữ (vì một số lý do tôi không thể vượt qua nó bên trong SP).

Vì vậy, tôi đã cố gắng

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 

nhưng nó không được làm việc. Tôi cũng tìm kiếm trên mạng cho bất kỳ ý tưởng/cú pháp vv .. nhưng không có may mắn như của bây giờ.

Bất kỳ ý tưởng nào?

+2

như thế nào là ** KHÔNG LÀM VIỆC ** là gì - bạn có nhận được một lỗi ?? Nếu vậy: ** lỗi gì ** ?? Là nó chạy nhưng không làm những gì bạn mong đợi nó để làm gì ?? Sau đó: những gì ** là ** nó làm so với những gì bạn đã mong đợi ** ...... bạn cần cung cấp thêm chi tiết ở đây! –

Trả lời

3

những gì mà @ReturnCode làm gì ở đó? nó được khai báo ở đâu đó?

Tôi cố gắng này trên một công việc mới và nó làm việc:

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

Tôi nghĩ rằng bạn cần phải tăng gấp đôi trích dẫn trong dấu ngoặc kép

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

Bạn phải viết bất kỳ thông tin vào kịch bản lệnh của bạn. Công việc có phiên riêng của họ. Làm thế nào họ sẽ biết các thông số của bạn

Dưới đây là một ví dụ

--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 
Các vấn đề liên quan