/**//*--作业处理实例根据sendTab的SendTime定制作业并且在该作业完成时,可以自动删除作业--邹建2004.04(引用请保留此信息)--*/--示例--测试表CREATETABLEdbo.sendTab(IDintIDENTITY(1,1),Namenvarchar(10),SendTimedatetime,AcceptUnitvarchar(10),SendUnitvarchar(10),Contentnvarchar(4000))CREATETABLEdbo.accepteTab(IDintIDENTITY(1,1),Namenvarchar(10),SendUnitvarchar(10),AcceptUnitvarchar(10),Contentnvarchar(4000))GO--创建处理的存储过程CREATEPROCdbo.p_JobSet@idint,--要处理的sendTab的id@is_deletebit=0--是否仅删除,为0则否,为1则是ASDECLARE@dbnamesysname,@jobnamesysname,@dateint,@timeint--job名称及运行时间SELECT@jobname=N'定时发送作业_'+CAST(@idasnvarchar),@date=CONVERT(varchar,SendTime,112),@time=REPLACE(CONVERT(varchar,SendTime,108),':','')FROMdbo.sendTabWHEREid=@id--如果job已经存在,则删除IFEXISTS(SELECT1FROMmsdb.dbo.sysjobsWHEREname=@jobname)EXECmsdb.dbo.sp_delete_job@job_name=@jobnameIF@is_delete=1RETURN--创建jobEXECmsdb.dbo.sp_add_job@job_name=@jobname,@delete_level=1--创建job步骤DECLARE@sqlvarchar(800)SELECT@sql=N'--job要实现的操作INSERTdbo.accepteTab(name,SendUnit,AcceptUnit,Content)SELECTname,AcceptUnit,SendUnit,ContentFROMdbo.sendTabWHEREid='+CAST(@idasvarchar),@dbname=DB_NAME()EXECmsdb.dbo.sp_add_jobstep@job_name=@jobname,@step_name=N'发送处理步骤',@subsystem='TSQL',@database_name=@dbname,@command=@sql,@retry_attempts=5,--重试次数@retry_interval=5--重试间隔--创建调度EXECmsdb.dbo.sp_add_jobschedule@job_name=@jobname,@name=N'时间安排',@enabled=1,@freq_type=1,@active_start_date=@date,@active_start_time=@time--添加目标服务器EXECmsdb.dbo.sp_add_jobserver@job_name=@jobname,@server_name=N'(local)'go--创建处理的触发器(新增/修改)CREATETRIGGERtr_insert_updateONdbo.sendTabFORINSERT,UPDATEASDECLARE@idintDECLAREtbCURSORLOCALFORSELECTidFROMinsertedOPENtbFETCHtbINTO@idwhile@@fetch_status=0BEGINEXECdbo.p_JobSet@id=@idFETCHtbINTO@idENDCLOSEtbDEALLOCATEtbgo--创建处理的触发器(删除)CREATETRIGGERtr_deleteONdbo.sendTabFORDELETEASDECLARE@idintDECLAREtbCURSORLOCALFORSELECTidFROMdeletedOPENtbFETCHtbINTO@idWHILE@@FETCH_STATUS=0BEGINEXECdbo.p_JobSet@id=@id,@is_delete=1FETCHtbINTO@idENDCLOSEtbDEALLOCATEtbgo--测试(每个步骤做完后,可以看看job是否建立,在时间到之后,可以看看Job是否被自动删除,并且dbo.accepteTab是否有记录)--a.插入数据INSERTdbo.sendTabSELECTN'文书1',DATEADD(s,1,GETDATE()),'UnitA','UnitB',N'txt'UNIONALLSELECTN'文书2',DATEADD(d,1,GETDATE()),'UnitA','UnitB',N'txt'UNIONALLSELECTN'文书3',DATEADD(m,1,GETDATE()),'UnitA','UnitB',N'txt'--b.修改UPDATEdbo.sendTabSETname=N'档案1',SendTime=DATEADD(s,5,GETDATE())WHEREid=2--c.删除DELETEdbo.sendtabWHEREid=3GO--删除测试DROPTABLEdbo.sendTab,dbo.accepteTabDROPPROCdbo.p_JobSet