如何遍历某数据库中的每一个表的总记录数
1 上网搜集了很多资料,终于写出可以执行的一个存储过程了,如下: 2 3 SET ANSI_NULLS ON 4 GO 5 SET QUOTED_IDENTIFIER ON 6 GO 7 8 --重点开始了 9 CREATE PROCEDURE [dbo].[hrmis_counts] 10 11 AS 12 BEGIN 13 --声明游标 14 Declare MyCursor Cursor 15 For Select name From hrmis..sysobjects where xtype='u' 16 --"hrmis"是我需要查询的数据库名称 17 --"xtype='u'"的意思是:只查询用户表,系统表不要,但可能会出错,网上有资料防止这种意外,至少我没有报错,就不理了。 18 19 --打开游标 20 Open MyCursor 21 --定义变量 22 Declare @tableName nvarchar(max),@sql nvarchar(max),@counts int 23 Fetch Next From MyCursor Into @tableName 24 While @@Fetch_status = 0 25 --@@Fetch_status = 0是指:游标未到末尾 26 Begin 27 Set @sql = 'Select @counts=count(*) From '+ @tableName 28 --print @sql 29 --Exec(@sql) 30 --上面这句会报错的“@counts未定义之类的,我忘了,有兴趣自己试试”,反正不能直接执行就是了。 31 --正确的写法是下面这句 32 Exec sp_executesql @sql,N'@counts Int out',@counts out 33 --好吧,我承认我也不太了解这条语句的含意,但这是不重点,重点是,它执行成功了。 34 If @counts > 10000 35 --只显示记录数大于1W的表名(这里随意就好了,不要也行) 36 print (Convert(nvarchar(max),@counts) +'......'+ @tableName) 37 Fetch Next From MyCursor Into @tableName 38 End 39 --关闭游标 40 Close MyCursor 41 Deallocate MyCursor 42 End 43 GO
保存一下,然后执行此存储过程,就可以自动遍历数据库中的所有表(647个表哇,蛋疼),然后把记录数大于1W的表名跟相应的记录数都显示出来,统计就不用这么麻烦了。