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