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.objects21 WHERE [type] = 'U'22 23 --判断临时表是否已经存在24 IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL25 BEGIN26 DROP TABLE #TempTable;--删除临时表27 END28 29 --将指定数据库中的表名称与排序号,装入临时表中(效率很高)30 SELECT ROW_NUMBER() OVER(ORDER BY NAME) AS rowNumber, [name]31 INTO #TempTable 32 FROM sys.objects33 WHERE [type] = 'U'34 35 WHILE @i <= @tableCount36 BEGIN37 --循环计算每个表的名称38 SELECT @tableName = name39 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 @rowCount47 48 IF @rowCount = 049 BEGIN50 SET @tableNamesWithoutDataCount = @tableNamesWithoutDataCount + 1; --无记录表计数器 + 151 IF @tableNamesWithoutData = ''52 BEGIN53 SET @tableNamesWithoutData = @tableName54 END55 ELSE56 BEGIN57 SET @tableNamesWithoutData = @tableNamesWithoutData + '、' + @tableName58 END59 END60 61 SET @i = @i + 1; --计数加162 SET @rowCount = 0; --设置为0,下次重新计算63 SET @tableName = ''; --清空,下次重新计算64 SET @sql = '';--清空,下次重新计算65 END66 67 SELECT @tableNamesWithoutDataCount; --输出无记录表的总数量68 SELECT @tableNamesWithoutData; --输出无记录表的名称
打开SQL 查询分析器,将上述脚本拷贝后运行,结果如下:
第一个查询结果,代表无记录数的表的总数量为652个;
第二个查询结果,代表无记录数的表的名称的字符串,中间用分号分割。