/**/
/*-----------------------------
问题描述:
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
*/
问题描述:
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
*/