定期自动删除数据

1、定义表:Table_To_Purge  [Table_Name,Day_Latency,Date_Field_Name]

用于存储需要删除的表的信息,表名、删除时间、字段名

  


2、设置一个job定期执行存储过程:EXECUTE [TISC].[dbo].[PURGE_TABLES]

  

3、编写存储过程:

CREATE PROCEDURE DBO.PURGE_TABLES AS
DECLARE
@tablename AS varchar(64),
@daylatency AS int,
@datefieldname AS varchar(64),
@sqldelete AS varchar(512),
@eldest AS int
BEGIN
DECLARE TABLE_CURSOR CURSOR FOR
 SELECT TABLE_NAME, DAY_LATENCY, DATE_FIELD_NAME FROM TABLE_TO_PURGE

 BEGIN
  SET @eldest = 0
  OPEN TABLE_CURSOR
  FETCH NEXT FROM TABLE_CURSOR INTO @tablename, @daylatency, @datefieldname
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
   IF ((@datefieldname = 'PIECE_ID') OR (@datefieldname = 'PLATEID') OR (@datefieldname = 'PLATE_ID'))
   BEGIN
    SET @sqldelete = 'delete FROM ' + @tablename +
    ' WHERE ' + @datefieldname + ' IN (SELECT PIECE_ID FROM PIECE_PRODUCTION WHERE DISCHARGING_TIME < (GETDATE() - ' +
    CAST(@daylatency AS varchar(3)) + '))'
   END
   ELSE
   BEGIN
    SET @sqldelete = 'delete FROM ' + @tablename + ' WHERE ' + @datefieldname +
    ' < (GETDATE() - ' + CAST(@daylatency AS varchar(3)) + ')'
   END
   PRINT @sqldelete
   EXECUTE (@sqldelete)
   PRINT CAST(@@ROWCOUNT AS varchar(5))
   IF (@eldest < @daylatency)
   BEGIN
    SET @eldest = @daylatency
   END
   FETCH NEXT FROM TABLE_CURSOR INTO @tablename, @daylatency, @datefieldname
  END


  CLOSE TABLE_CURSOR
  DEALLOCATE TABLE_CURSOR

  DELETE FROM PIECE_PRODUCTION WHERE DISCHARGING_TIME < (GETDATE() - @eldest)
  DELETE FROM MILL_PDI WHERE CREATION_TIME  < (GETDATE() -20)
 END
END
GO

转载于:https://www.cnblogs.com/caishuowen/archive/2011/05/14/2046173.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值