如何在SQL SEREVR实现每30天执行一个存储过程。不使用SQL自代的作业情况下,用纯代码!

如何在SQL SEREVR实现每30天自动执行一下存储过程。或存储过程中的一些代码!

不使用SQL自带的作业,使用纯代码!

求大神帮忙。

打开sql server客户端 最后有个sql sever 代理 - 作业-新建作业 里面设置。(记住要启动代理哦)

不使用SQL Server代理的方法,还有其它方法吗?

用代理方法省事,怎么不用

看看有没有管理工具可以用

可以用后台代码实现,使用全局文件Global.asax,控制时间进行执行。

你需要在服务器上面安装一个服务。

https://jingyan.baidu.com/article/fa4125acb71a8628ac709226.html

以下代码中实现每分钟循环一次。判断日期和时间,可以达到每月什么时候执行。

partial class Service : ServiceBase
{
    private Thread ServiceBody = null;

    public Service()
    {
        InitializeComponent();

        this.ServiceBody = new Thread(new ThreadStart(this.Service_Running));
    }

    protected override void OnStart(string[] args)
    {
        // TODO: 在此处添加代码以启动服务。
        this.ServiceBody.Start();
    }

    protected override void OnStop()
    {
        // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
        this.ServiceBody.Abort();
    }


    private void Service_Running()
    {
        int sacanFrequency = 60; //间隔时间1分钟


        while (true)
        {

            try
            {

#if DEBUG
Common.WriteFile.WriteLogOneHours(WriteFileType.Core, EventLogEntryType.Error, "Service_Running is running...");
#endif

                if (DateTime.Now.Day == 1 && DateTime.Now.Hour == 1 && DateTime.Now.Minute == 30)
                {
                    //进行处理

                }
            }
            catch (System.Exception ex)
            {

#if DEBUG
Common.WriteFile.WriteLogOneHours(WriteFileType.Core, EventLogEntryType.Error, "Service_Running " + ex.ToString());
#endif
}

            //让线程根据扫描频率休眠,单位毫秒, 1000为一秒
            Thread.Sleep(sacanFrequency * 1000);
        }
    }
}
  1. 写一个控制台程序,程序里写调用存储过程的代码
  2. 在服务器上创建计划任务,每30天执行一次
  3. 计划任务指向你的控制台程序,也就是让计划任务调用你的控制台程序

exec msdb..sp_add_job @job_name='kk1'

exec msdb..sp_add_jobstep @job_name='kk1',
@step_name = 'kkstep',
@subsystem = TSQL,
@database_name='kk', ---执行的数据库名
@command = '......',---sql语句,执行存储过程: 【过程名】 【参数1】,【参数2】……
@retry_attempts = 5,
@retry_interval = 5

EXEC msdb..sp_add_jobschedule @job_name='kk1',
@name = 'camp',
@freq_type=4 , --4 每freq_interval天,8 每freq_interval周,16 每freq_interval月
@freq_interval=30, ---每30天
@freq_subday_type=0,
@freq_subday_interval=0,
@active_start_time=173100 ---17:31:00执行

EXEC msdb.dbo.sp_add_jobserver
@job_name = 'kk1' ,
@server_name =N'(LOCAL)'

不用代理,就只能用Windows自带的任务功能,创建一个每30天执行一次的Windows任务,任务的命令就执行一个ISQL命令。
isql -Ulogin_id [-Ppassword] [-Sserver_name] [-Hwksta_name] [-ddb_name] -Q "EXEC 存储过程"
这样子,就会按指定的参数,登录指定的SQL SERVER,并切换到执行的数据库名下,执行存在过程,执行完毕后退出。