[SQL]透過T-SQL指令的方式,建立工作排程
日前因為部份系統需執行自動排程的關係,但是又不允許透過SQL Management Studio進行設定
所以花了一點時間找了一下如何透過T-SQL的方式進行排程工作的方式
建立SQL工作排程的功能,主要必須使用到四個msdb資料庫裡的預存程序
1.msdb.dbo.sp_add_job : 建立主要工作排程內容
2.msdb.dbo.sp_add_jobserver : 設定執行排程的伺服器
3.msdb.sp_add_jobstep : 設定執行排程的步驟
4.msdb.dbo.sp_add_jobschedule : 設定排程的執行時間
執行時所需要的參數可以參考附上超連結的幾個頁面
以我自己要設定排程的內容來說,我需要執行排程的條件如下:
1.早上1:00執行
2.執行sp_SendTodoAlert這一個預存程序
3.2014/3/30 開始執行這一個排程
最後得到的執行語法如下面的內容
	USE msdb
	EXEC dbo.sp_add_job
	    @job_name = N'每日通知',
	    @enabled = 1,
	    @description = N'每日早上1:00的排程通知',
	    @owner_login_name = N'sa';
	EXEC dbo.sp_add_jobserver
	    @job_name = N'每日通知';
	EXEC sp_add_jobstep
	    @job_name = N'每日通知',
	    @step_name = N'每日作業執行',
	    @command = N'exec sp_SendTodoAlert';
	EXEC dbo.sp_add_jobschedule
	    @job_name = N'每日通知',
	    @name = N'每日作業',
	    @freq_type = 4,
	    @freq_interval = 1,
	    @freq_subday_type = 1,
	    @active_start_date = 20140330,
	    @active_start_time = 10000;
其中只要@job_name這個參數一樣,執行新增排程的預存程序就會自動作關聯
但是實際寫入到資料庫之中的內容,是由GUID作PK與FK的關聯的
有興趣的人可以看看下列四個資料表所呈現的內容
	Select * from msdb.dbo.sysjobs
	Select * from msdb.dbo.sysjobschedules
	Select * from msdb.dbo.sysjobservers
	Select * from msdb.dbo.sysjobsteps