CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

如何让一个存储过程一天内只执行一次?

楼主zsanhong(老狼)2006-06-02 08:25:07 在 MS-SQL Server / 基础类 提问

有一个得到次日计划的存储过程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

相关问题

关键词

得分解答快速导航

  • 帖主:zsanhong
  • wangtiecheng
  • liangpei2008
  • sxycgxj
  • wangtiecheng
  • jasonren
  • SweetTulip
  • jilate

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo