所以我正在使用一个数据库,我将在其中清除包含超过 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/