技术开发 频道

SQL Server在特定时间内执行存储过程

  【IT168技术文档】

  如何在特定时间让SQL Server数据库自动执行一些存储命令呢?可以使用SQL Server中的作业计划功能,可以指定在某个时间点运行,具体的设定可以参照联机帮助。

  下面介绍一下邹建写的具体代码,可以参考一下。

  创建定时调用存储过程的作业

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_JobSet]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[p_JobSet] GO /*--指定时间调用存储过程 创建一个在指定时间,调用指定存储过程的作业 作业执行完成后会自动删除 /*--调用示例 declare @dt datetime set @dt=dateadd(minute,1,getdate()) --当前时间1分钟后执行 exec p_JobSet 'master.dbo.xp_cmdshell ''dir c:\*.*''',@dt --*/ create proc p_JobSet @prorcname sysname, --要调用定时调用的存储过程名,如果不在当前库中,则用:库名.所有者名.存储过程名 @job_date datetime --存储过程的执行时间(包括时间信息) with encryption as declare @dbname sysname,@jobname sysname ,@date int,@time int select @jobname='临时作业_'+cast(newid() as varchar(36)) ,@date=convert(varchar,@job_date,112) ,@time=replace(convert(varchar,@job_date,108),':','') if exists(select 1 from msdb..sysjobs where name=@jobname) exec msdb..sp_delete_job @job_name=@jobname --创建作业 exec msdb..sp_add_job @job_name=@jobname,@delete_level=1 --创建作业步骤 declare @sql varchar(800) select @sql='exec '+@prorcname ,@dbname=db_name() exec msdb..sp_add_jobstep @job_name=@jobname, @step_name = '处理步骤', @subsystem = 'TSQL', @database_name=@dbname, @command = @sql, @retry_attempts = 5, --重试次数 @retry_interval = 5 --重试间隔 --创建调度 EXEC msdb..sp_add_jobschedule @job_name = @jobname, @name = '时间安排', @enabled = 1, @freq_type = 1, @active_start_date = @date, @active_start_time = @time -- 添加目标服务器 EXEC msdb.dbo.sp_add_jobserver @job_name = @jobname , @server_name = N'(local)' go

0
相关文章