问题:删除维护计划时报错:索引超出范围必 须为⾮负值并⼩于集合⼤⼩
在SQL Server 2016上删除已运行维护计划后,维护计划job没有自动删除掉,手工再删除维护计划job,提示删除失败。
错误现象:delete 语句与 reference 约束"FK_subplan_job_id"冲突。该冲突发生于数据库"msdb",表"dbo.sysmaintplan_subplans", column 'job_id'。语句已终止。 (Microsoft SQL Server,错误: 547)
原因分析:
从错误信息我们可以看出是删除某个系统表中记录时,由于外键约束关系,导致删除失败。最后导致存储过程msdb.dbo.sp_delete_job执行失败。
解决方案:
use [msdb]
declare @job_name varchar(100)
set @job_name = N'job_name'
--注:job_name为维护计划对应的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)
--删除作业文章来源:https://www.toymoban.com/news/detail-507810.html
delete from msdb.dbo.sysjobs_view where name = @job_name文章来源地址https://www.toymoban.com/news/detail-507810.html
到了这里,关于删除维护计划时报错:索引超出范围必 须为⾮负值并⼩于集合⼤⼩的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!