如何在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);
}
}
}
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,并切换到执行的数据库名下,执行存在过程,执行完毕后退出。