我们有一个软件不会删除不再需要的条目。为了了解服务器中有多少数据正在浪费,并准备进行大型清理操作,我试图遍历所有表并拉出标记为删除的记录。这就是我正在使用的:
DECLARE @total INT DECLARE @count INT DECLARE @name NVARCHAR(25) DECLARE @rn INT SET @total = (SELECT COUNT(Name) FROM sys.tables) SET @count = 1 SET @rn = (SELECT ROW_NUMBER() OVER(ORDER BY Name) FROM sys.tables) WHILE @count <= @total AND @count < 2 BEGIN SET @name = ( SELECT Name, ROW_NUMBER() OVER(ORDER BY Name) FROM sys.tables WHERE @rn = @count ) EXEC('SELECT * FROM WS_Live.dbo.' + @name + ' WHERE GCRecord IS NOT NULL') SET @count += 1 END
这是我的错误:
消息116,级别16,状态1,行19当未将EXISTS引入子查询时,只能在选择列表中指定一个表达式。
我意识到我的错误可能与选择该行中的两列有关
SET @name = ( SELECT Name, ROW_NUMBER() OVER(ORDER BY Name) FROM sys.tables WHERE @rn = @count )
但是,我不确定如何才能确保选择下一行。
PSAND @count <2仅用于脚本测试。
AND @count <2
如何遍历所有表?
使用此系统存储过程
sp_MSforeachtable @command1="select count(*) from ?"
样例代码
笔记:
sp_MSforeachtable