定期自动删除数据
2011-05-14 11:45
253 查看
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
用于存储需要删除的表的信息,表名、删除时间、字段名
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
相关文章推荐
- Linux系统对网站数据定期自动备份与删除
- 生产环境Mysql数据库备份脚本,Linux下网站数据定期自动备份与删除脚本,Windows下备份网站目录和数据库
- win2003系统通过ftp自动上传数据及定期删除脚本
- 向表中插入数据的时候,自动删除重复的数据
- 怎么样让系统定期自动备份数据?(SQL版)
- SQL2005自动备份,定期删除的维护计划及自动定期清除日志
- Script:创建一个job,通过存储过程定期删除数据的脚本
- DROP TABLESPACE时数据文件是否会自动删除
- PowerShell自动删除过期数据
- centos中创建自动备份Mysql脚本任务并定期删除过期备份
- 设定sql server定期自动备份数据库
- android listview 数据删除后没有自动刷新,已删除数据依然显示但是不可点击
- 定期自动重命名文件并上传到ftp然后删除
- 重复数据删除过程中的数据自动分段
- 如何在Mongodb中实现数据超时自动删除功能?
- oracle_自动备份用户数据,删除N天前的旧数据(非rman,bat+vbs)
- 设定sql server定期自动备份数据库
- 内置虚拟化,自动分层,重复数据删除,固态硬盘,IBM Storwize V7000亮点解析
- 在删除表1某些数据的同时自动删除表2的相关数据
- dxDBTreeView自动删除数据问题