Как найти SPID выполняемого задания SqlAgent с помощью SMO

Благодаря объектам SMO, использующим Server.JobServer.jobs для получения списка заданий, я могу определить состояние каждого задания. Для тех, кто в настоящее время выполняет, я хотел бы найти SPID, на котором он выполняется. Я также могу получить список процессов сервера, используя Server.EnumProcesses (). Это дает мне список активных в настоящее время SPID. Я хочу соответствовать двум.

Лучшее, что я смог придумать, - это преобразовать jobid в строку и подставить jobId из строки программы в таблицу EnumProcesses (которая, по крайней мере, в моей системе, встраивает jobId в это описание). Это действительно ужасно по нескольким причинам, не в последнюю очередь из-за того, что Guid в описании программы и guid для jobID переключают свои байты в первые 3 фрагмента строкового представления. Тьфу.

Есть ли лучший способ сделать это с помощью SMO?

10.12.2008 15:16:04
2 ОТВЕТА

Использование SMO, не то, что я знаю.

Я сделал это с помощью T / SQL. Возьмите значение job_id и приведите его к varbinary. Это должно соответствовать значению в имени приложения (после части «Агент SQL»).

1
6.01.2009 08:25:16

Используйте SP_who2, в поле «Program» результата вы найдете SQLAgent-Jobid. вы получите jobID из sysjobs из таблицы MSDB. теперь вы можете получить sp_id задания

1
7.02.2013 06:05:48