zoukankan      html  css  js  c++  java
  • 通过代码执行SQL Server代理任务

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

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

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

    2. 通过存储过程

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

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

    image

    2. 然后编写代码

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

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

    image

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

     

    那么,有没有办法在T-SQL中通过存储过程的方式调用呢?

    1. 首先要知道的是,Job的信息是放在MSDB的,所以需要在MSDB里面想办法。而且也应该让调用方具有MSDB的一些权限

    image

     

    2. 我们很快就定位到了这个存储过程sp_start_job。下面是一个范例

    USE msdb ;
    GO

    EXEC dbo.sp_start_job N'THINKER-demo-demo_products_merge-THINKER-1' ;
    GO

    相比较而言,用T-SQL的方式更加易于实现。

    image

  • 相关阅读:
    opencart后台操作--第一节 多语言篇---中文语言包
    Apache mod_rewrite实现HTTP和HTTPS重定向跳转
    js搞定网页的简繁转换
    TP5 首页导航一级和二级分类
    php中is_null,empty,isset,unset 的区别详细介绍
    thinkPHP5 引入模板
    mac Gitblit安装
    springCloud 之 Eureka注册中心高可用配置
    spring cloud config-配置中心
    链路追踪工具Zipkin简单整合
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1456095.html
Copyright © 2011-2022 走看看