Я использую 64-разрядную версию SQL Server 2008 Developer Edition с установленным пакетом обновления 1.
У меня есть задание агента 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)). Нет проблем.
Но если вы попробуете пример:
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)
Хорошо, теперь с нуля:
PRINT N'$(ESCAPE_SQUOTE(JOBID))'
приводит к 0xE33FE637C10B3C49A6E958BB3EF06959, но job_id
37E63FE3-0BC1-493C-A6E9-58BB3EF06959
"N", как мне кажется, выполняет неявное преобразование в NVARCHAR (JOBID) ...
Хорошо, я думаю, мне нужно заботиться о типе данных (JOBID). В книге «Администрирование SQL Server 2008» на странице 168/169 также есть пример использования (JOBID):
declare @jobid binary(16)
SELECT @jobid =Convert(Uniqueidentifier,$(ESCAPE_NONE(JOBID)))
приводит к:
Неправильный синтаксис рядом с '('. (Microsoft SQL Server, Ошибка: 102)
Я полностью сбит с толку. Могли бы, пожалуйста, кто-нибудь помочь мне хорошим советом или решением. Мы приветствуем любую помощь.
С уважением Гельмут