当前位置:Gxlcms > 数据库问题 > 统计一个数据库中,无记录的表的sql语句

统计一个数据库中,无记录的表的sql语句

时间:2021-07-01 10:21:17 帮助过:4人阅读

] 换成你的目标数据库名称。

 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个;

 第二个查询结果,代表无记录数的表的名称的字符串,中间用分号分割。

 

 

技术研究方向:专注于Web(Mvc)开发框架、WinForm开发框架、项目(代码)自动化生成器、ORM等技术研究与开发应用

企业级项目经验:编务管理系统、印前管理系统、印务管理系统、图书销售管理系统、图书发行管理系统、图书馆管理系统、

                          数据交换平台、ERP综合管理平台


 欢迎转载,请注明文章出处与链接信息。    如果文章对您有帮助,请帮忙推荐,谢谢!  

 撰写人:张传宁  http://www.cnblogs.com/SavionZhang                   技术分享

 

 

 

 

 

 

 

 

 

 

 

 

。。。

 

统计一个数据库中,无记录的表的sql语句

标签:

人气教程排行