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