SQL Server2005维护计划一种错误的处理方式

本文提供了一种解决MsSqlServer2005中无法删除维护计划的方法,涉及通过SQL脚本逐层解除相关联表的约束,最终实现删除目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

/*-----------------------------
问题描述:
MsSqlServer2005中,由于计算机名修改或者删除、修改或重建维护计划的误操作引起
系统中有无法删除的维护计划,错误提示类似于:
“DELETE语句与 REFERENCE约束"FK_subplan_job_id"冲突。
该冲突发生于数据库"msdb",表"dbo.sysmaintplan_subplans",   
column 'job_id'”
*/


--070319 whbo
--
适用于mssql2005,可用于删除sql server 2005中使用界面环境无法删除的维护计划

use [msdb]
set nocount on
begin tran
declare @SubPlanName varchar(200
--计划名称从Sqlserver 代理->作业查看,
--
例如:BakUserDB.子计划,那该值就是“子计划”,赋值给下面的变量
set @SubPlanName='Subplan_1' --'子计划' 

--获得外键约束用到的列
declare @subPlan_id varchar(100),@job_id varchar(100)
    ,
@msx_job_id varchar(100),@Schedule_id varchar(100)
select @job_id=job_id,@msx_job_id=msx_job_id,
    
@subPlan_id=subPlan_id from sysmaintplan_SubPlans where SubPlan_name=@SubPlanName

--按照顺序删除记录
if (@SubPlan_id is not null and @SubPlan_id<>''
delete from sysmaintplan_log where SubPlan_id=@SubPlan_id

if (@SubPlanName<>'' and @SubPlanName is not null)  
delete from sysmaintplan_SubPlans where SubPlan_Name=@SubPlanName

if (@Schedule_id is not null and @Schedule_id <>''
delete from SysSchedules where Schedule_id=@Schedule_id

if (@job_id is not null and @job_id<>'')
delete from sysjobs where job_id=@job_id


/*--------------------------------------------------------------------
在上面的句子执行完后,该维护计划的接点依然存在,此时再更新msdb中对应的视图
(该视图我是通过Sql Server Profiler监测到的)代码如下:
---------------------------------------------------------------------
*/

delete
  
FROM msdb.dbo.sysmaintplan_plans
--执行上述代码结束后,刷新维护计划的节点,该节点成功删除。
commit tran
if @@error<>0 Print '执行失败'
else Print '执行成功'

set nocount off



/*
select * from SysSchedules
select * from sysjobs
select * from sysmaintplan_SubPlans
*/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值