所以我正在使用一个数据库,我将清除包含超过30天的行的各种表。我对SQL的知识相当有限,并想知道是否有某种方法可以选择要清除的行和不会被清除的行。实质上,通过#ofrowspurged和#ofrowsnotpurged对行进行分组。
使用此信息是否可以对日期大于30天的行进行分组,指示将清除多少行以及多少行不会被清除?更具体地说,我将表名输入到SQL查询中,因此您不需要遍历多个表。
如果您有任何问题,请告诉我,因为这种解释可能含糊不清。谢谢!
答案 0 :(得分:2)
执行此操作的唯一方法是在特定日期字段上过滤的所有表上手动运行计数(*)。原因是因为一个表可能有一个列" 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
答案 1 :(得分:2)
仍然不确定您要做什么,但这里是一个示例,说明如何删除行数,然后从特定表中删除这些行。
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in (server.txt) do (
set "$ip="
for /f "delims=[] tokens=2" %%b in ('ping -n 1 %%a ^| find "["') do (
set "$ip=%%b"
)
if defined $ip (echo %%a - !$ip! OK) else (echo %%a KO)
)