通過儲存過程清除過期的資料,減少無用資料。
- 計算出要清理的日期、表名等
- 執行清理操作
主要的技術點是:
- 計算出要清理的日期。可以用
dateadd
函式計算 - 執行動態的sql語句。可以用
EXEC (@sql)
語法
參考程式如下
CREATE PROCEDURE [dbo].[cleanData]
-- 要清除的月份的,格式: 201901
-- 如果為NULL,則清除12個月之前的資料
@pYearMonth varchar(6)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @TableName NVARCHAR(50),@Sql NVARCHAR(MAX), @Month NVARCHAR(8);
-- 清理12個月之前的,如11月,就清理去年10月的
Select @Month=CONVERT(varchar(6),dateadd(month, -13, getdate()), 112);
if @pYearMonth IS NOT NULL
set @Month=@pYearMonth;
-- Insert statements for procedure here
-- 刪除列表
DELETE FROM [dbo].[gstrade_bill_summary] where type=`m` and
(
CONCAT(CONVERT(varchar(10), [year]),CONVERT( varchar(10),[sno]))=@Month or
CONCAT(CONVERT(varchar(10), [year]),`0`,CONVERT( varchar(10),[sno]))=@Month
);
SET @TableName = CONCAT(`aa_info_m_`, @Month);
SET @sql = (`drop table `+QUOTENAME(@TableName));
IF OBJECT_ID (@TableName, N`U`) IS NOT NULL
EXEC (@sql) else select `no table `+@TableName as msg;
SET @TableName = CONCAT(`bb_m_`, @Month);
SET @sql = (`drop table `+QUOTENAME(@TableName));
IF OBJECT_ID (@TableName, N`U`) IS NOT NULL
EXEC (@sql) else select `no table `+@TableName as msg;
SET @TableName = CONCAT(`dd_m_`, @Month);
SET @sql = (`drop table `+QUOTENAME(@TableName));
IF OBJECT_ID (@TableName, N`U`) IS NOT NULL
EXEC (@sql) else select `no table `+@TableName as msg;
END