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

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

你可能感兴趣的:(数据库)