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

