今天被人問到,假如我們需要在代碼中執(zhí)行SQL Server 的代理任務,那么有什么思路呢?
我馬上想到,一般會有兩種思路
1. 通過SMO(SQL Server Management Object Model)
2. 通過存儲過程
下面首先介紹的是通過SMO的手段
1. 首先要添加兩個程序集的引用

2. 然后編寫代碼
using Microsoft.SqlServer.Management.Smo; using Microsoft.SqlServer.Management.Smo.Agent;
/// /// 列出某個服務器上面所有的代理作業(yè) /// 作者:陳希章 /// /// /// private void btList_Click(object sender, EventArgs e) { Server svr = new Server("Thinker"); foreach (Job item in svr.JobServer.Jobs) { lstJobs.Items.Add(item); } } /// /// 雙擊運行某個作業(yè) /// 作者:陳希章 /// /// /// private void lstJobs_MouseDoubleClick(object sender, MouseEventArgs e) { Job item = lstJobs.SelectedItem as Job; item.Start(); } |

這是相當方便的。但有一個問題就是SMO這種操作必須在服務器由管理員身份執(zhí)行。
那么,有沒有辦法在T-SQL中通過存儲過程的方式調用呢?
1. 首先要知道的是,Job的信息是放在MSDB的,所以需要在MSDB里面想辦法。而且也應該讓調用方具有MSDB的一些權限

2. 我們很快就定位到了這個存儲過程sp_start_job。下面是一個范例
USE msdb ; GO
EXEC dbo.sp_start_job N'THINKER-demo-demo_products_merge-THINKER-1' ; GO |
相比較而言,用T-SQL的方式更加易于實現(xiàn)。

【編輯推薦】
- Oracle與SQL Server之間的數(shù)據(jù)遷移
- SQL Server置疑數(shù)據(jù)庫解決方法
- SQL Server群集的幾個關鍵技巧