【SqlServer】清除過期資料的儲存過程

KavenFan發表於2019-01-24

通過儲存過程清除過期的資料,減少無用資料。

  1. 計算出要清理的日期、表名等
  2. 執行清理操作

主要的技術點是:

  • 計算出要清理的日期。可以用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

相關文章