SQL Server数据库中统计无记录数的表
大家使用的时候,将sql脚本中的红色[TestDB] 换成你的目标数据库名称。
1 /************************************************************
2 * Code formatted by SoftTree SQL Assistant ?v7.0.158
3 * Time: 2016/5/19 18:47:02
4 * Author:zhangcn
5 ************************************************************/
6
7 -- 指定一个数据库名称
8 USE [TestDB];
9
10 DECLARE @tableCount INT = 0; -- 定义变量,统计一个数据库中有多少张表
11 DECLARE @rowCount INT = 0; -- 定义变量,记录单个表中的记录数
12 DECLARE @i INT = 1; -- 定义变量, 用于循环计数
13 DECLARE @tableNamesWithoutData NVARCHAR(4000) = ''; -- 定义变量,用于记录数据库中哪些表没有数据
14 DECLARE @tableNamesWithoutDataCount INT = 0; -- 定义变量,统计数据库中无无记录表的数量
15 DECLARE @tableName NVARCHAR(2000) = ''; -- 定义变量,记录单个表的名字(该表没有记录)
16 DECLARE @sql NVARCHAR(2000) = ''; -- 定义sql,接收查询语句
17
18 -- 统计指定的数据库中有多少张表
19 SELECT @tableCount = COUNT([name])
20 FROM sys.objects -- 系统基础对象所在的视图
21 WHERE [type] = 'U'
22
23 -- 判断临时表是否已经存在
24 IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
25 BEGIN
26 DROP TABLE #TempTable;-- 删除临时表
27 END
28
29 -- 将指定数据库中的表名称与排序号,装入临时表中(效率很高)
30 SELECT ROW_NUMBER() OVER(ORDER BY NAME) AS rowNumber, [name]
31 INTO #TempTable
32 FROM sys.objects
33 WHERE [type] = 'U'
34
35 WHILE @i <= @tableCount
36 BEGIN
37 -- 循环计算每个表的名称
38 SELECT @tableName = [name]
39 FROM #TempTable
40 WHERE rowNumber = @i;
41
42 -- 拼接sql语句,用于统计表中的记录数
43 SET @sql = ' SELECT @num = COUNT(*) FROM [' + @tableName + ']';
44 EXEC sp_executesql @sql,N'@num int output',@rowCount OUTPUT -- 执行查询
45
46 -- select @rowCount
47
48 IF @rowCount = 0
49 BEGIN
50 SET @tableNamesWithoutDataCount = @tableNamesWithoutDataCount + 1; -- 无记录表计数器 + 1
51 IF @tableNamesWithoutData = ''
52 BEGIN
53 SET @tableNamesWithoutData = @tableName
54 END
55 ELSE
56 BEGIN
57 SET @tableNamesWithoutData = @tableNamesWithoutData + '、' + @tableName
58 END
59 END
60
61 SET @i = @i + 1; -- 计数加1
62 SET @rowCount = 0; -- 设置为0,下次重新计算
63 SET @tableName = ''; -- 清空,下次重新计算
64 SET @sql = ''; -- 清空,下次重新计算
65 END
66
67 SELECT @tableNamesWithoutDataCount; -- 输出无记录表的总数量
68 SELECT @tableNamesWithoutData; -- 输出无记录表的名称
打开SQL 查询分析器,将上述脚本拷贝后运行,结果如下:
第一个查询结果,代表无记录数的表的总数量为652个;
第二个查询结果,代表无记录数的表的名称的字符串,中间用分号分割。