zoukankan      html  css  js  c++  java
  • 统计一个数据库中,无记录的表的sql语句

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

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

  • 相关阅读:
    Centos-获取远程主机对应端口信息-telnet
    Centos-跟踪数据传输路由状态-traceroute
    Centos-本机网络连接、运行端口和路由表等信息-netstat
    Centos-远程拷贝-scp
    Centos-配置网络或显示当前网络接口状态-ifconfig
    Centos-挂载和卸载分区-mount
    Centos-退出抽取设备-eject
    Centos-强制将内存中数据写入磁盘-sync
    Centos-检查文件系统并尝试修复-fsck
    数据结构-静态查找表
  • 原文地址:https://www.cnblogs.com/SavionZhang/p/5510887.html
Copyright © 2011-2022 走看看