如何让一个存储过程一天内只执行一次?
有一个得到次日计划的存储过程GetTommorowPlan,过程执行后,产生次日计划,
插入到Plan表中.
得到如下的列表
itemiD PlanDay PlanDetail
1 2005-06-02 A
2 2005-06-02 B
..
4 2005-06-03 c
5 2005-06-03 D
...
其中itemID是主键,自动递增的.想实现这样的功能,只要GetTommorowPlan执行后,今天就不再执行这个存储过程.否则的话每执行一次这个过程,就会出现以下数据:
itemiD PlanDay PlanDetail
1 2005-06-02 A
2 2005-06-02 B
..
4 2005-06-03 c
5 2005-06-03 D
6 2005-06-03 c
7 2005-06-03 D
...
什么时候调用这个存储过程GetTommorowPlan是由用户从应用程序界面决定的.有没有办法在数据库中做处理?
问题点数:20、回复次数:12Top
1 楼zsanhong(老狼)回复于 2006-06-02 08:25:45 得分 0
顶!Top
2 楼wlmail2005(菜菜菜)回复于 2006-06-02 08:31:12 得分 0
作业可以搞定Top
3 楼zsanhong(老狼)回复于 2006-06-02 08:42:43 得分 0
作业是定时的,而这个过程什么时候执行是由用户从界面执行的.本人认为不妥.Top
4 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-06-02 08:53:31 得分 2
存储过程中加事务,单独建一个表用来记录是否已处理,事务结束时追加处理记录,事务开始时判断是否已处理。Top
5 楼liangpei2008(笑青天)回复于 2006-06-02 08:58:13 得分 2
同意楼上,在存储过程中加入判断处理Top
6 楼wlinglong(灵龙)回复于 2006-06-02 09:01:32 得分 0
学习Top
7 楼sxycgxj(云中客)回复于 2006-06-02 09:01:58 得分 2
可以新建个表,也可以将最近执行的时间信息存放注册表或配置文件中
如果仅存放这样一个信息的话,可以考虑使用后者,因为没有必要保存一个日期值,而新建一个表
Top
8 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-06-02 09:10:06 得分 2
新建表保存便于查询,更可以记录一些其他信息,如:操作员、客户段机器名、处理时间长短等信息。
更何况此表占用空间很小,一天一条。Top
9 楼jasonren(jason)回复于 2006-06-02 09:33:32 得分 1
windows系统自带的计划任务Top
10 楼SweetTulip(茫然的郁金香)回复于 2006-06-02 09:51:41 得分 1
用系统自带的任务计划Top
11 楼zsanhong(老狼)回复于 2006-06-02 10:31:51 得分 0
能否举个例子?Top
12 楼jilate()回复于 2006-06-02 11:21:49 得分 10
create procedure aaa
as
if exists(select * from 执行情况记录表 where datediff(day, executedate, getdate()) = 0)
begin
raiserror('今日已经执行过了', 16,1)
return
end
insert into 执行情况记录表 values(.,.,.,.,.,getdate())
...........Top




