我需要知道作业是否在SQL Server 2000中运行,所以我可以使用msdb.dbo.sp_stop_job来停止它。 我发现这个代码在2005年有效:
IF EXISTS(
select 1
from msdb.dbo.sysjobs_view job
inner join msdb.dbo.sysjobactivity activity on job.job_id = activity.job_id
where
activity.run_Requested_date is not null
and activity.stop_execution_date is null
and job.name = 'myjobname'
)
BEGIN
EXEC msdb.dbo.sp_stop_job @name_job;
END
但是,在SQL 2000中msdb.dbo.sysjobactivity表不存在。什么是替代解决方案?
感谢。
答案 0 :(得分:0)
我认为你说没有研究有点苛刻,所以我会给你一块骨头......下一次,花费10-15分钟谷歌搜索,你最终可能会遇到这种情况。
试试这个......
DECLARE @jobname VARCHAR(100)
SET @jobname='my job name'
IF OBJECT_ID('tempdb..#jobs') IS NOT NULL DROP TABLE #jobs
CREATE TABLE #jobs (JOB_ID UNIQUEIDENTIFIER, LAST_RUN_DATE INT, LAST_RUN_TIME INT, NEXT_RUN_DATE INT, NEXT_RUN_TIME INT, NEXT_RUN_SCHEDULE_ID INT, REQUESTED_TO_RUN INT, REQUEST_SOURCE INT, REQUEST_SOURCE_ID VARCHAR(100), RUNNING INT, CURRENT_STEP INT, CURRENT_RETRY_ATTEMPT INT, STATE INT)
INSERT INTO #jobs EXEC MASTER.DBO.XP_SQLAGENT_ENUM_JOBS 1,NOTHING
SELECT *
FROM #jobs e
JOIN MSDB..SYSJOBS j ON e.JOB_ID=j.JOB_ID
WHERE RUNNING=1
--AND j.name=@jobname