mysql - 清除数据库 - 计算清除/未清除的表

标签 mysql sql sql-server database stored-procedures

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

是否可以使用此信息对日期大于 30 天的行进行分组,以指示将清除多少行以及不清除多少行?更具体地说,我会将表名输入到 SQL 查询中,因此您无需遍历多个表。

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

最佳答案

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

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

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

关于mysql - 清除数据库 - 计算清除/未清除的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30982928/

相关文章:

mysql - 有关 mysql 的 Perl 问题 :Can't locate object method "connect" and Can't use string ("") as a HASH

SQL-使用 CASE 而不使用 GROUP BY

sql - SQL Server 代码之间的区别?

sql - Select中的表值构造函数最大行数限制

java - MariaDb10 (MySQL 5.6) - 从 MySQL 5.5 更新后出现随机高 I/O 和慢查询

mysql - 如何在mySql中多次执行select语句?

php - 在php代码中添加照片类别?

sql - 问号不可见

sql - 甲骨文 SQL : Selecting based on value in previous rows columns

sql - 数据立方体设计 : hard-to-aggregate measure