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

  • 2019 年 10 月 4 日
  • 筆記

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

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