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个;
第二个查询结果,代表无记录数的表的名称的字符串,中间用分号分割。