将time字段的含义改为应该删除那一刻的时间,然后为他建一个索引。建JOB,每分钟将time值小于现在时间的记录删除。可能会快一点。

解决方案 »

  1.   

    to:yangzi (笨笨) 
     老板主,好久不见了!! 你的问题是不是可以用WAITFOR DELAY
     在你插入一条记录的时候(比如插入id=1、time=10的记录时候),执行:WAITFOR DELAY '00:10:00'
    SELECT EmployeeID FROM Northwind.dbo.Employees其中这个'00:10:00'可以用变量代替。更详细的看WAITFOR的帮助。
      

  2.   

    不好意思,有错误,语句是:WAITFOR DELAY '00:10:00'
    delete tablename where id=1其中这个'00:10:00'可以用变量代替。更详细的看WAITFOR的帮助。
      

  3.   

    WAITFOR DELAY 会挂起连接,也就是说同一时间只能有一个WAITFOR DELAY,我觉得不可行。笨笨长期不来,一来就出这么难的问题哦:)我觉得没有什么很好的办法来解决这个问题。第一个方法不可取,如果记录太多,可能轮不过来,而且锁的问题不好解决。第二个方法我觉得可以做,命名的问题倒不是关键哦,关键是JOB太多,没实际这么用过,天知道MSSQL会不会因此而“疯 ”掉?:)我觉得这样的事务不必要在应用程序设计时给数据库服务器这么复杂的任务吧。我觉得有必要这样处理数据吗?在一天的某个时段,定期将所有过期数据删除不行吗?平时需要取数时加上过滤条件,把过期的数据排除就行了。这样服务器的负担会小多了,不会有性能之忧了。
      

  4.   

    呵呵,是呀,可能没条记录都要挂起一个连接。
    记录太多的话只有修改表结构了。
    ID,time,StartTime
    01  10   2002-9-9 8:58
    02  15   2002-9-9 8:59在放一个job,语句是:
    delete tablename where time <datediff(minute,StartTime,getdate())
      

  5.   

    少了一句,每分钟执行一次。好像语句应该写成:
    delete tablename where time <=datediff(minute,StartTime,getdate())
      

  6.   

    支持icevi(按钮工厂) 思想:
    1。将TIME改为过期的时间;
    2。建立一个JOB,每天将过期的记录删除;
    3。其他有关查询,加上过期数据的过滤条件,只查询不过期的数据。
      

  7.   

    谢谢各位了。这个系统不是我设计的。
    和设计者探讨以后,因为数据不是很多,所以基本上采用了yang_兄的意见。
    新建一个表,ID,到期时间,
    然后建一个job,每分钟扫描处理一次。对于带来的效率问题,设计者也认可了。:)
    btw:兄弟最近作视频开发。昨天晚上,给同事抓来应差。谢谢大家还记得我。
    还有,兄弟不日将赴日工作。
      

  8.   

    哈,谢各位了。
    我一直在日资公司。这次去总公司工作两年。
    不知道那儿让不让上csdn诶。