SQL Server通过代码执行代理任务

今天被人问到,假如我们需要在代码中执行SQL Server 的代理任务,那么有什么思路呢?

我马上想到,一般会有两种思路

1. 通过SMO(SQL Server Management Object Model)

2. 通过存储过程

下面首先介绍的是通过SMO的手段

1. 首先要添加两个程序集的引用

2. 然后编写代码

using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Smo.Agent;

 

///


/// 列出某个服务器上面所有的代理作业
/// 作者:陈希章
///
///
///
private void btList_Click(object sender, EventArgs e)
{
    Server svr = new Server("Thinker");
    foreach (Job item in svr.JobServer.Jobs)
    {
        lstJobs.Items.Add(item);
    }
}
///
/// 双击运行某个作业
/// 作者:陈希章
///
///
///
private void lstJobs_MouseDoubleClick(object sender, MouseEventArgs e)
{
    Job item = lstJobs.SelectedItem as Job;
    item.Start();
}

这是相当方便的。但有一个问题就是SMO这种操作必须在服务器由管理员身份执行。

那么,有没有办法在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的方式更加易于实现。

【编辑推荐】

  1. Oracle与SQL Server之间的数据迁移
  2. SQL Server置疑数据库解决方法
  3. SQL Server群集的几个关键技巧

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/288324.html<

(0)
管理的头像管理
上一篇2025-05-16 06:48
下一篇 2025-05-16 06:50

相关推荐

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注