SQL Server2005維護計劃一種錯誤的處理方式

 

/*-----------------------------
問題描述:
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
*/



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章