清除数据库 - 计数 purged/not-purged 个表

Purging Database - Count purged/not-purged tables

所以我正在使用一个数据库,我将在其中清除包含超过 30 天的行的各种 table。我对 SQL 的了解相当有限,想知道是否有某种方法可以 select 将被清除的行和不会被清除的行。本质上,按#ofrowspurged 和#ofrowsnotpurged 对行进行分组。

是否可以使用此信息对日期大于 30 天的行进行分组,指出将清除多少行以及不清除多少行?更具体地说,我会将 table 名称输入到 SQL 查询中,这样您就不需要遍历多个 tables.

如果您有任何疑问,请告诉我,因为此解释可能含糊不清。谢谢!

执行此操作的唯一方法是手动 运行 对特定日期字段上的所有 table 过滤进行计数 (*)。这样做的原因是因为一个 table 可能有一个列 "CreatedDate",您需要检查它是否超过 30 天,而另一个可能有一个名为 "UpdatedDate" 的列您需要检查。

但是,如果所有 table 都具有您要比较的相同日期字段,但仅 table 名称不同,那么您可以通过执行以下操作进行动态检查:

declare @objcursor as cursor; 

DECLARE @SQL nvarchar(max), @Schema sysname, @Table sysname;
SET @SQL = ''
SELECT @SQL = @SQL + 'SELECT '''+QUOTENAME(TABLE_SCHEMA)+'.'+
  QUOTENAME(TABLE_NAME)+''''+
  '= COUNT(*) FROM '+ QUOTENAME(TABLE_SCHEMA)+'.'
+QUOTENAME(TABLE_NAME) +' WHERE getDate() - [YOUR_COLUMN_NAME] >30;'
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
PRINT @SQL                -- test & debug
EXEC sp_executeSQL      @SQL,   -- getting variable input / setting variable output
                       ,N'@cursor cursor output', -- params definition

                        @objcursor output    -- output parameter

fetch next from @objcursor into @TableName,@Schema
while (@@fetch_status = 0)
begin
    /*Do Something With Your Table Name, eg delete, truncate, whatever*/    

fetch next from @objcursor into @Table,@Schema
end

仍然不太确定您要做什么,但这里有一个示例,说明您如何计算要删除的行数,然后从特定 table.

中删除这些行
select COUNT(*) as NumToDelete
from MyTable
where DateInserted < DATEADD(DAY, -30, getdate())

DELETE from MyTable
where DateInserted < DATEADD(DAY, -30, getdate())