2012-10-03 4 views
2

나는 직업이 3, 가지고 있습니다 :이 작업 내에서 SQL Server 작업 이름을 저장 프로 시저에 전달하려면 어떻게합니까?</p> <p>RunProcedures</p> <p>그것은 단계가 있습니다 :</p> <p>1 단계 : 무언가 <br> 2 단계 : 다른 것을 <br> 3 단계 : 이메일 단계 <br></p> <p>을

EXEC spSendSuccessEmail -- and here's where I want to pass the job name. 
,363,210

가 여기에 위의 저장 프로 시저에 대한 코드입니다 :

ALTER PROCEDURE [dbo].[spSendSuccessEmail] @JobName VARCHAR(30) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @EmailBody VARCHAR(50) 

    SET @EmailBody = @JobName + ' ran successfully' 

    BEGIN TRY 
     EXEC msdb.dbo.sp_send_dbmail 
      @profile_name = 'DBTeam', 
      @recipients = '[email protected]', 
      @copy_recipients = '[email protected]', 
      @subject = 'Process Complete', 
      @body = @EmailBody, 
      @importance = 'Normal', 
      @sensitivity = 'Normal'; 
    END TRY 
    BEGIN CATCH 
     EXEC spGetDatabaseErrorInfo 
    END CATCH   
END 

나는이 저장 프로 시저가에서의 작업의 이름을 전달하려면 어떻게합니까?

토큰을 읽었지만이 작업을 수행하는 방법에 대해서는 약간 혼란 스럽습니다.

누구든지 내게 손을 줄 수 있습니까?

+0

Exec spSendSuccessEamil @Jobname. 변수가 선언 된 것으로 가정하고, 이전부터 설정하고, 문자열 유형입니다. 내가 놓친 게 있니? –

답변

4

UPDATE 나는 몇 가지 테스트를했고, SQL 서버 (2005 SP1 이후)의 일부 버전의 경우 토큰을 탈출해야합니다. 아래 코드에 escape 명령을 추가했습니다.

$ (JOBID)는 사용할 token이고 msdb..sysjobs에서 쿼리하여 작업 이름을 찾을 수 있습니다. SQL 서버 2005에 대한

declare @jobName varchar(100) 

select @jobName = name from msdb..sysjobs where job_id = $(ESCAPE_NONE(JOBID)) 

exec spSendSuccessEamil @jobName 

및 이전 : SQL 서버 2005 SP1의 이후

declare @jobName varchar(100) 

select @jobName = name from msdb..sysjobs where job_id = $(JOBID) 

exec spSendSuccessEamil @jobName 

그냥 작업의 3 단계에서 명령 텍스트로 이들 중 하나를 사용합니다.

+0

이것은 실제로 작동하지 않았다 :(... 처음에는 "이름"열 앞에 "SELECT"를 넣으려고했다고 생각합니다. 어떤 이유로 $ (ESCAPE_NONE (JOBID))에 밑줄이 그어져있을 때 @ JobName. 그것은 잘못된 이름을 계속 말합니다. – Testifier

+0

흠, 제 작업에 직접 SQL의 처음 두 줄을 붙여 넣었고 제대로 작동했습니다. 사용중인 SQL Server 버전은 무엇입니까? 2005 서비스 팩 1보다 이전 버전 인 경우 ESCAPE_NONE , 그래서 그것은 단지 "job_id = $ (JOBID)"입니다 .ESCAPE_NONE은 이전 버전의 SQL 서버에는 존재하지 않을 수도 있습니다 .. – Slider345

+0

SQL Server 2012를 사용 중이며 매력적이었습니다. –