-- 作者:zhq_2010
-- 發(fā)布時(shí)間:2010/9/3 13:29:58
-- SQL2005早期維護(hù)計(jì)劃刪除出錯(cuò)的解決
/**//*----------------------------- 問(wèn)題描述: MsSqlServer2005中,由于計(jì)算機(jī)名修改或者刪除、修改或重建維護(hù)計(jì)劃的誤操作引起 系統(tǒng)中有無(wú)法刪除的維護(hù)計(jì)劃,錯(cuò)誤提示類(lèi)似于: “DELETE語(yǔ)句與 REFERENCE約束"FK_subplan_job_id"沖突。 該沖突發(fā)生于數(shù)據(jù)庫(kù)"msdb",表"dbo.sysmaintplan_subplans", column \'job_id\'” */ --適用于mssql2005,可用于刪除sql server 2005中使用界面環(huán)境無(wú)法刪除的維護(hù)計(jì)劃
use [msdb] set nocount on begin tran declare @SubPlanName varchar(200) --計(jì)劃名稱(chēng)從Sqlserver 代理->作業(yè)查看, --例如:BakUserDB.子計(jì)劃,那該值就是“子計(jì)劃”,賦值給下面的變量 set @SubPlanName=\'Subplan_1\' --\'子計(jì)劃\'
--獲得外鍵約束用到的列 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
/**//*-------------------------------------------------------------------- 在上面的句子執(zhí)行完后,該維護(hù)計(jì)劃的接點(diǎn)依然存在,此時(shí)再更新msdb中對(duì)應(yīng)的視圖 ---------------------------------------------------------------------*/ delete FROM msdb.dbo.sysmaintplan_plans --執(zhí)行上述代碼結(jié)束后,刷新維護(hù)計(jì)劃的節(jié)點(diǎn),該節(jié)點(diǎn)成功刪除。 commit tran if @@error<>0 Print \'執(zhí)行失敗\' else Print \'執(zhí)行成功\'
set nocount off
|