2010-11-18 7 views
6

서비스 팩 1이 설치된 SQL Server 2008 64 비트 Developer Edition을 실행하고 있습니다. SQL Server 에이전트 작업이 있습니다. 이 직업 내에서 나는 내 직업의 job_id를 얻고 싶다.
MSDN (http://msdn.microsoft.com/en-us/library/ms175575(v=SQL.100).aspx)에서 작업 단계에서 토큰 사용에 대한 설명을 찾을 수 있습니다. 와우, 좋아, 그게 내가 찾고있는거야 !! 그냥 (JOBID)를 사용하십시오.
SQL Server 2005 SP1부터 $ (ESCAPE_NONE (JOBID))와 같은 매크로를 사용해야합니다. 문제 없어.
하지만 당신은 예를하려고하면 :SQL Server 에이전트 - 내 job_id 가져 오기

DECLARE @name NVARCHAR(128) 
select @name = name from msdb.dbo.sysjobs where job_id = $(ESCAPE_SQUOTE(JOBID)) 
PRINT @name 

를 당신이 얻을 :
근처의 구문이 잘못되었습니다 'ESCAPE_SQUOTE을'. (Microsoft SQL Server, 오류 : 102)
이 좋아, 이제 처음부터 : 0xE33FE637C10B3C49A6E958BB3EF06959에

PRINT N'$(ESCAPE_SQUOTE(JOBID))' 

결과 만 작업 ID 37E63FE3-0BC1-493C-A6E9-58BB3EF06959
인 'N' "I 생각하면 (JOBID)의 NVARCHAR로 암시 적 변환을하게됩니다 ...
좋아, 나는 (JOBID)의 데이터 유형에 대해 신경 써야한다고 생각합니다.

declare @jobid binary(16) 
SELECT @jobid =Convert(Uniqueidentifier,$(ESCAPE_NONE(JOBID))) 

결과 :.
근처의 구문이 잘못되었습니다 '('(마이크로 소프트 SQL 서버, 오류 페이지 169분의 168에 책 "SQL 서버 2008 관리"에서 (JOBID) 사용하는 예제도 있습니다 :.. 102)
지금은 완전히 혼란 스러워요 사람이 좋은 조언이나 해결책 좀 도와 주 시겠어요 도움의 모든 종류의 감사

안부 는 헬무트

답변

3

파서가 말하는 것을 잊어 버리십시오. 가변 해상도는 런타임에 완료됩니다. 파서는 그것에 대해 알지 못합니다.

3

우리는 승에 문제가 있었다. 이 최근에 그리고 MSDN에서 찾은 경로를 가지 않았다. 대신 우리는 dbo.sysjobs에서 직접 작업 이름을 찾아 (예제의 반대편) 작업 상태를 확인하기 위해 작업 상태를 사용했습니다 (작업 상태가 변경되면 장기 실행 루프에서 빠져 나옵니다).

declare @jobid uniqueidentifier 
SELECT @jobid = job_id from msdb.dbo.sysjobs where name = '[blah]' 
2

이것은 명백한 들릴지 모르지만, 내가 쿼리 창에서 실행하는 경우 난 당신이 첫 번째 샘플, 에서 인용 오류,하지만 작업 단계에 해당 스크립트를 붙여 넣을 때 완벽하게 잘 실행됩니다.

이러한 토큰은 작업 단계에서만 사용할 수 있습니다. 그리고 우리가 jobid 토큰에 어떤 인용 부호도 기대하지 않는다면, 당신이 그것을 참조 할 때마다 나는 ESCAPE_NONE을 사용할 것입니다.

4

답장을 보내 주셔서 감사합니다. 문제는 작업 단계에서 구문을 구문 분석하려고했기 때문입니다. 그런 다음이 오류가 발생했습니다. 일자리를 운영하는 동안 문제는 없습니다. 내 가장 좋은 해결책은 지금 :

declare @JobID uniqueidentifier 
SELECT @JobID = $(ESCAPE_NONE(JOBID)); 
PRINT 'My JobID is ' + Convert(char(255), @JobID) 

지금 당신이 @JobID 취급하지만, 내가 아는 한 지금까지 당신이 (255) 숯불 항상 변환해야합니다. 사용자 state_dba가 MSDN에 있습니다.

관련 문제