写个SQL语句:
delete tb where dt<dateadd(yy,-1,getdate())

解决方案 »

  1.   

       一个ERP系统的后台数据库,200多份表中都存有数据,各个表中的数据是相互关联的.需要进行清理的主要的存放各种业务数据的表(如库存数据\采购数据\销售数据\生产数据\财务数据等).
      

  2.   

    难,有外键,需要顺序
    而且有些子表估计没有日期字段,因为日期字段在主表中,子表是没有日期字段的。需要自己根据数据库的设计写删除语句。先删子表,再删主表
    如下两个表为主从表
    declare @sale table(销售单号 int,销售日期 datetime)
    declare @saleitem table(销售单号 int,商品编号 int,销售数量)
    --先删子表
     delete @saleitem where 销售单号 in (select 销售单号 from @sale where 销售日期 < convert(datetime,'2007-01-01'))
    --再删主表
     delete @sale where 销售日期 < convert(datetime,'2007-01-01')
      

  3.   

    一般的删除操作都要写日志的,所以大量的删除会比较慢,而且日志文件增长很快,还有索引碎片...有外键约束的话,删除是要有顺序才行。如果你有数据库的完整备份,可以在删除之前把数据库的日志模式改为“批量日志”的模式,
    以最小化的模式写日志文件,可以大大加快速度。之后要重建索引,否则性能上会有问题。
    删除之后,不要忘记改回来:“完全日志”的模式。然后不要忘记再做一个完整备份。本来想了一下使用 truncate table会比较快,但是truncate 是删除全部记录,而且重置自增列ID,估计这不是你希望要的。