Как получить значение от step1 до step2 в sql Job - PullRequest
4 голосов
/ 21 мая 2011

Мне нужно создать задание SQL.

Шаг 1: Вставить строку в таблицу TaskToProcess и вернуть ProcessID (PK и Identity)

Шаг2: Извлеките ProcessID, сгенерированный в step1 , передайте значение в пакет служб SSIS и выполните пакет служб SSIS.

Возможно ли это на сервере SQL JOB ??

Пожалуйста, помогите мне в этом

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 21 мая 2011

Нет встроенного метода передачи значений переменных между этапами задания.Однако есть несколько обходных путей.

Один из вариантов - сохранить значение в таблице в конце шага 1 и запросить его обратно из базы данных на шаге 2.

Звучиткак вы генерируете ProcessID, вставляя в таблицу и возвращая SCOPE_IDENTITY() вставленной строки.Если шаг задания 1 является единственным процессом, вставляемым в эту таблицу, вы можете извлечь последнее вставленное значение из задания 2, используя функцию IDENT_CURRENT('<tablename>').

РЕДАКТИРОВАТЬ

Если в вашу таблицу управления процессами может быть вставлено несколько процессов, лучшим решением, вероятно, является рефакторинг шагов 1 и 2 в один шаг - возможно, с помощью управляющего главного пакета служб SSIS (или другой эквивалентной технологии), который может передавать переменныемежду шагами.

0 голосов
/ 23 ноября 2016

Похож на Ответ Эд Харпера , но некоторые подробности можно найти в "Переменные в рабочих шагах" на ветке MSDN

Для рабочей среды, некоторые разновидности таблиц с ключами процесса (используя job_id) или глобальные временные таблицы кажутся наиболее полезными. Конечно, Я понимаю, что вы не хотите, чтобы что-то осталось «глобально» имеется в наличии. При необходимости вы также можете изучить шифрование или запутывая значение, которое вы храните. Обязательно удалите строку один раз Вы использовали это.

Таблицы с технологическим ключом описаны в статье " Как обмениваться данными между хранимыми процедурами "

Еще одно предложение в Отправка параметров в задания / шаги заданий агента SQL Server Тема форума MSDN для создания таблицы для хранения параметров, например:

CREATE TABLE SQLAgentJobParms
(job_id uniqueidentifier,
 execution_instance int,
 parameter_name nvarchar(100),
 parameter_value nvarchar(100),
 used_datetime datetime NULL); 

Ваша хранимая процедура вызова будет принимать переданные ей параметры и вставьте их в SQLAgentJobParms. После этого он может использовать EXEC sp_start_job. И, как уже отмечалось, этапы работы будут выбираться из SQLAgentJobParms для получения необходимых значений.

...