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

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综合管理平台



欢迎转载,请注明文章出处与链接信息。    如果文章对您有帮助,请帮忙推荐,谢谢!

撰写人:张传宁  http://www.cnblogs.com/SavionZhang                   

。。。

时间: 2024-12-09 07:56:17

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

sql语句联表更新(从一个数据库中的一张表更新到另一个数据库的另一张表)

一.sql server数据库写法: update a set a.ksgmm=b.ksgmm,a.ksgm=b.ksgm,a.scztm=b.scztm,a.sczt=b.sczt from landsde.sde.jszb a,kyqcldb.dbo.kcl_ksjj b where a.nd=b.nd and a.kqbh=b.kqbh and a.djflbh =b.djflbh 其中landsde.sde.jszb.kyqcldb.dbo.kcl_ksjj是不同数据库下的不同数据表 二

把一个数据库表中的数据插入到另外一个数据库中的一张表中

数据库表结构不同 INSERT INTO [CodeFirstDbContext].[dbo].[Companies](CompanyID,CompanyName,Manager,CompanyType,IsDelete) SELECT CompID,Company,CName,ctype,0 FROM [YFDB2012].[dbo].[Company] 数据库表结构相同 INSERT INTO [CodeFirstDbContext].[dbo].[Companies] SELECT * F

定时从一个数据库表中的数据存储到另外一个数据库中的表,而且怎么处理重复的数据?

原文:http://www.iteye.com/problems/77856 定时从一个数据库表中的数据存储到另外一个数据库中的表,而且怎么处理重复的数据? 表结构肯定是不能破坏,但是临时表如果是自己的数据库还行,问题是这个Oracle数据库是客户的数据库呢,你不能在他的数据库做任何多余的操作吧?还有别的更好的方法吗? 这个真的是比较困难. 首先,你要从客户机oracle取数据,因为这1分钟间隔之内不知道用户机新增加了哪些数据(大部分情况下是用户使用别的系统插入数据,而你又没有这个系统的程序接口

[SQL]复制数据库某一个表到另一个数据库中

SQL:复制数据库某一个表到另一个数据库中 SELECT * INTO 表1 FROM 表2 --复制表2如果只复制结构而不复制内容或只复制某一列只要加WHERE条件就好了 例子:SELECT * INTO [IMCDB].[dbo].[SysLog] FROM [AimManageDB].[dbo].[SysLog] (将数据库AimManageDB中的SysLog表复制到数据库IMCDB中) 跨服务器复制表 select * INTO [SMSDB].[dbo].[SysLog] FROM

如何将一个数据库中的一个表复制到另一个数据库中的表中

如何将一个数据库中的一个表复制到另一个数据库中的表中 2013-09-11 17:13匿名 | 浏览 13763 次 如何将一个数据库中的一个表复制到另一个数据库中的表中两个表的列名不同.有知道的么?SQL语句直接导过去.! 2013-09-12 20:26网友采纳 热心网友 如果另一个库中没有同名的表select * into b数据库.dbo.a表 from a数据库.dbo.a表 where 条件 如果是追加到另一个表中inert into b数据库.dbo.a表select * from

Extjs4.0+HSSFWorkbook+SpringMVC实现将数据库中的记录导出到本地Excel格式

Extjs4.0+HSSFWorkbook+SpringMVC实现将数据库中的记录导出到本地Excel格式 自己封装的JS类Share.js var Share = {}; Share.ExportByExcel = function(url) { var appWindow = Share.getWin(); appWindow.open(url); appWindow.focus(); }; 调用的前端js buttons : [{ text : '查询', handler : queryS

字符串之“统计一个字符串中单词的个数”

题目:统计一个字符串中单词的个数 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开 输入:my name is jacky 输出:the number of word is 4 代码如下: #include <stdio.h> int main(int argc, char *argv[]) { char str[80]; int i=0,num=0,flag=0; char c; gets(str); while((c=str[i])!='\0') { if(c==' ') flag

Java学习(4):统计一个文件中的英文,中文,数字,其他字符以及字符总数

要求:统计一个文件中的英文,中文,数字,其他字符以及字符总数(此随笔以txt文件为例) import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; /** * 将一个文件中英文,中文,数字,其

查询数据库中重复记录的方法

select * from [DataBase].[dbo].[TableName] where [字段一] in (select [字段一] from [DataBase].[dbo].[TableName] group by [字段一] having count([字段一]) > 1) 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from peop