1

通过使用 Server.JobServer.jobs 获取作业列表的 SMO 对象,我可以找到每个作业的状态。对于那些当前正在执行的,我想找到它正在执行的 SPID。我还可以使用 Server.EnumProcesses() 获取服务器进程的列表。这给了我当前活动的 SPID 的列表。我想匹配两者。

我能想到的最好的方法是将 jobid 转换为字符串,并将 jobId 从 EnumProcesses 表中的程序字符串中取出(至少在我的系统上,该表将 jobId 嵌入到此描述中)。这真的很难看,有几个原因,其中最重要的原因是程序描述中的 Guid 和 jobID 的 guid 在字符串表示的前 3 段中切换了它们的字节。呸。

有没有更好的方法使用 SMO 来做到这一点?

4

2 回答 2

1

使用 SMO,我不知道。

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

于 2009-01-06T08:25:16.443 回答
1

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

于 2013-02-07T06:05:48.643 回答