2016-05-20
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个;
第二个查询结果,代表无记录数的表的名称的字符串,中间用分号分割。
技术研究方向:专注于Web(Mvc)开发框架、WinForm开发框架、项目(代码)自动化生成器、ORM等技术研究与开发应用 企业级项目经验:编务管理系统、印前管理系统、印务管理系统、图书销售管理系统、图书发行管理系统、图书馆管理系统、 数据交换平台、ERP综合管理平台 欢迎转载,请注明文章出处与链接信息。 如果文章对您有帮助,请帮忙推荐,谢谢! |
。。。
时间: 2024-12-09 07:56:17