表里加个状态列,记录是否发送
再次运行job时候先判断是否已经发送~~

解决方案 »

  1.   


    按照你的思路,其实,发送后把记录从表里移除,就不会有问题了。也许我没说清楚问题所在。我再说一遍:等待发送的表(EmailPool),里有100条记录。job每5分钟运行一次job 里有一个存储过程:从EmailPool里取出所有记录(100条),以游标的方式 每10秒发出一封(waitfor DELAY  '00:00:10'),发完后删除一条记录。这样job1在运行了5分钟后发了30封。EmailPool里还有70条记录。
    此时新的 job(姑且叫job2)又运行了,job2会取出emailpool所有记录(70条)。注意此时job1和job2同时在运行了。此时就出现我的担心了:70封邮件里30封邮件在这个5分钟里会被job1发送,job2也发送,这样就发送重复了。以此类推又一个5分钟后 会有3个job 同时运行了。。
      

  2.   

    (1)每过5分钟来来运行一次job,如果job运行时间超过5分钟,那前一个job没运行完毕,后一个job有运行了,这样会导致某些邮件重复发送。 
    --------------------------
    如果发邮件的job只有一个, 不会存在这个问题, job还在执行的情况下, 即使下一次运行的时候已经到了, job也不会再次执行
      

  3.   

    在运行的job不会被再次调度。
      

  4.   

    谢谢各位的答复,我做过测试了,两个job会交替执行,不会有重复的
      

  5.   

    我说的测试是打开两个查询窗口,分别运行同一个存储过程,发现两个存储过程里都会发邮件,是交替取出数据的。
    (1)如果你们说 job运行的时候不会再次被调用。那就是是说下一次的调用时间是在上一次执行完毕5分钟后才执行的?
    (2)我在配置job运行的时候是间隔5分钟的。(1)和(2)有冲突的时候会以(1)为标准?
      

  6.   

    是用MSSQL 2005里面自带的发邮件功能吗?
    感觉database mail主要是用来发送关于MSSQL状态的,也就是主要用于MSSQL管理和监控方面的,
    不知道如果用来发其他邮件是否在性能上有影响,
    毕竟这个功能不是为批量(或大量)发送邮件而设计的。