如何遍历某数据库中的每一个表的总记录数

 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的表名跟相应的记录数都显示出来,统计就不用这么麻烦了。

原文地址:https://www.cnblogs.com/seasons1987/p/2568360.html