Sql server 如何使用SMO查找正在执行的SqlAgent作业的SPID

Sql server 如何使用SMO查找正在执行的SqlAgent作业的SPID,sql-server,smo,sql-server-agent,Sql Server,Smo,Sql Server Agent,通过使用Server.JobServer.jobs获取作业列表的SMO对象,我可以找到每个作业的状态。对于当前正在执行的SPID,我希望找到它正在执行的SPID。我还可以使用server.enumprocess()获取服务器进程的列表。这给了我一个当前活动SPID的列表。我想把这两种搭配起来 我能想到的最好办法是将jobid转换为字符串,并将jobid从EnumProcesss表中的程序字符串中分串出来(至少在我的系统中,它将jobid嵌入到这个描述中)。这真的很难看,有几个原因,其中最重要的一

通过使用Server.JobServer.jobs获取作业列表的SMO对象,我可以找到每个作业的状态。对于当前正在执行的SPID,我希望找到它正在执行的SPID。我还可以使用server.enumprocess()获取服务器进程的列表。这给了我一个当前活动SPID的列表。我想把这两种搭配起来

我能想到的最好办法是将jobid转换为字符串,并将jobid从EnumProcesss表中的程序字符串中分串出来(至少在我的系统中,它将jobid嵌入到这个描述中)。这真的很难看,有几个原因,其中最重要的一个原因是程序描述中的Guid和jobID的Guid在字符串表示的前3段中切换了字节。恶心


使用SMO有更好的方法吗?

使用SMO,我不知道


我已经使用T/SQL完成了这项工作。获取job_id值并将其强制转换为varbinary。然后,它应该与应用程序名称中的值相匹配(在“SQL代理”部分之后)。

使用SP_who2,在结果“程序”字段中,您将找到SQLAgent作业ID。您将从MSDB表中的sysjobs获取jobID。现在您可以获取作业的sp_id