日期:2014-05-19  浏览次数:20450 次

每隔一段时间执行存储过程的问题
我现在在做一个服务性质的网站.
当客户在我们的网站购买了一个服务周期为30天的服务项目的时候(如:2006-6-5   17:20:35在本站购买的服务项目).

问题:我怎么样在2006-7-5   17:20:35这个时间来自动调用一个存储过程终止这个服务.

------解决方案--------------------
写一个job 每天的闲置(在你认为的),检查一下服务的到期时间和系统当前时间相差多少天,如果时间到了2006-7-5 17:20:35这个时间就可以自动调用一个存储过程终止这个服务.
------解决方案--------------------
如一楼的。实现秒级别的作业可以参考:

USE tempdb

IF EXISTS(SELECT * FROM msdb.dbo.sysjobs WHERE name= '30秒一次的作业 ')
EXEC msdb.dbo.sp_delete_job @job_name= '30秒一次的作业 '

--定义创建作业
DECLARE @jobid uniqueidentifier
EXEC msdb.dbo.sp_add_job
@job_name = N '30秒一次的作业 ',
@job_id = @jobid OUTPUT

--定义作业步骤
DECLARE @sql nvarchar(400),@dbname sysname
SELECT @dbname=DB_NAME(),
@sql=N '
IF EXISTS(SELECT * FROM sysobjects WHERE name= ' 'tb_log ' ')
INSERT tb_log VALUES(CONVERT(char(8),GETDATE(),108))
ELSE
SELECT dt=CONVERT(char(8),GETDATE(),108) INTO tb_log '
EXEC msdb.dbo.sp_add_jobstep
@job_id = @jobid,
@step_name = N '作业步骤名称 ',
@subsystem = 'TSQL ',
@database_name=@dbname,
@command = @sql

--创建调度1
EXEC msdb..sp_add_jobschedule
@job_id = @jobid,
@name = N '第1个30秒 ',
@freq_type=4,
@freq_interval=1,
@freq_subday_type=0x4,
@freq_subday_interval=1,
@active_start_time = 00000

--创建调度2
EXEC msdb..sp_add_jobschedule
@job_id = @jobid,
@name = N '第2个30秒 ',
@freq_type=4,
@freq_interval=1,
@freq_subday_type=0x4,
@freq_subday_interval=1,
@active_start_time = 00030

--添加目标服务器
DECLARE @servername sysname
SET @servername=CONVERT(nvarchar(128),SERVERPROPERTY(N 'ServerName '))
EXEC msdb.dbo.sp_add_jobserver
@job_id = @jobid,
@server_name = @servername
GO

--等待2分钟后查看结果
WAITFOR DELAY '00:02:00 '
SELECT * FROM tb_log ORDER BY dt
GO

--删除测试
DROP TABLE tb_log
EXEC msdb.dbo.sp_delete_job @job_name= '30秒一次的作业 '

/*--结果
dt
--------
14:54:01
14:54:31
14:55:01
14:55:31
--*/