加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer代理作业删除失败问题

发布时间:2020-12-12 13:33:41 所属栏目:MsSql教程 来源:网络整理
导读:在SQL Server 2008上遇到了先删除已运行维护计划后,再删除代理中由其产生的作业时,提示删除失败。 DELETE 语句与 REFERENCE 约束"FK_subplan_job_id"冲突。该冲突发生于数据库"msdb",表"dbo.sysmaintplan_subplans",column 'job_id'。 语句已终止。 (Micr

在SQL Server 2008上遇到了先删除已运行维护计划后,再删除代理中由其产生的作业时,提示删除失败。


DELETE 语句与 REFERENCE 约束"FK_subplan_job_id"冲突。该冲突发生于数据库"msdb",表"dbo.sysmaintplan_subplans",column 'job_id'。

语句已终止。 (Microsoft SQL Server,错误: 547)


与维护计划有关的有三张表:

1.sysmaintplan_log:在维护计划运行后,会在此表中进行记录;

2.sysjobschedules:代理作业的作业信息

3.sysmaintplan_subplans:记录维护计划的子计划信息

4.sysjobs_view:相关的作业信息


这4张表有着PK和FK的关联关系,在删除作业时,就容易因为发生FK的冲突而导致失败。


具体的处理方法如下:

USE msdb

declare @job_name varchar(100)

set @job_name = N'HostpitalTestPlan.Subplan_Reset' ? --将要删除的作业赋给@job_name


--删除在计划里面的日志

DELETE sysmaintplan_log

FROM sysmaintplan_subplans AS subplans INNER JOIN

sysjobs_view AS syjobs ON subplans.job_id = syjobs.job_id INNER JOIN

sysmaintplan_log ON subplans.subplan_id = sysmaintplan_log.subplan_id

WHERE (syjobs.name = @job_name)


--删除代理的作业

DELETE sysjobschedules

FROM sysjobs_view v INNER JOIN sysjobschedules o ON v.job_id=o.job_id WHERE v.name=@job_name


--删除子计划

DELETE sysmaintplan_subplans

FROM sysmaintplan_subplans AS subplans INNER JOIN

sysjobs_view AS syjobs ON subplans.job_id = syjobs.job_id

WHERE (syjobs.name = @job_name)


--删除作业

DELETE FROM msdb.dbo.sysjobs_view WHERE NAME = @job_name

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读