第1个回答 2008-01-28
以下存储过程实现输出一个列表,字段是表名和记录数,并将较大的表放在前面,可在查询分析器中执行:
alter procedure alltablecount as
declare @name varchar(100)
declare tablecur cursor for select name from sysobjects where xtype= 'u '
create table #tablecount(tablename varchar(100),reccount int)
open tablecur
fetch next from tablecur into @name
while @@fetch_status!=-1
begin
exec ('insert into #tablecount select tablename='''+@name+''',reccount=count(1) from '+@name+' ')
fetch next from tablecur into @name
end
close tablecur
deallocate tablecur
select * from #tablecount order by reccount desc
go
exec alltablecount
第2个回答 2008-01-28
使用游标实现的方法:
USE pubs
GO
DECLARE @NAME VARCHAR(40)
DECLARE @SQL VARCHAR(4000)
DECLARE authors_cursor CURSOR FOR
SELECT Name as 表名 FROM SYSOBJECTS
WHERE XTYPE='U'
OPEN authors_cursor
FETCH NEXT FROM authors_cursor
INTO @NAME
SET @SQL='SELECT '''+@NAME+''' AS 表名, COUNT(1) AS 行数 FROM '+@NAME
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM authors_cursor
INTO @NAME
SET @SQL=@SQL+' UNION ALL SELECT '''+@NAME+
''' AS 表名,COUNT(1)AS 行数 FROM '+@NAME
END
CLOSE authors_cursor
DEALLOCATE authors_cursor
EXEC(@SQL)
GO
测试通过,不过有一个表会显示两次,你可以再改改本回答被提问者采纳