统计表
//查询所有表明
select name from sysobjects where xtype='u'
select * from sys.tables
//查询数据库中所有的表名及行数
SELECT a.name AS [TABLE NAME] ,
b.rows AS [RECORD COUNT]
FROM sysobjects AS a
inner join sysindexes AS b ON a.id = b.id
WHERE ( a.type = 'u' )
AND ( b.indid IN ( 0, 1 ) )
order BY a.name ,
b.rows DESC
//查询所有的标明及空间占用量\行数
select
object_name(id) tablename,
8*reserved/1024 reserved,
rtrim(8*dpages)+'kb' used,
8*(reserved-dpages)/1024 unused,
8*dpages/1024-rows/1024*minlen/1024 free,
rows
--,*
from sysindexes
where indid=1
order by tablename,reserved desc
SELECT T.TABLE_NAME AS [TABLE NAME] ,
MAX(I.ROWS) AS [RECORD COUNT]
FROM SYSINDEXES I ,
information_schema.TABLES T
WHERE T.TABLE_NAME = OBJECT_NAME(I.ID)
AND T.TABLE_TYPE = 'BASE TABLE'
GROUP BY T.TABLE_SCHEMA ,
T.TABLE_NAME;
---------------------------------------------------------------
SELECT OBJECT_NAME(id) AS [TABLE NAME] ,
rowcnt AS [RECORD COUNT]
FROM sysindexes
WHERE indid < 2
AND OBJECTPROPERTY(id, 'ismsshipped') = 0
ORDER BY OBJECT_NAME(id)
--创建临时表
CREATE TABLE ##RowCount
(
[TABLE NAME] VARCHAR(500) ,
[RECORD COUNT] INT
)
--执行存储过程
EXEC sp_msforeachtable 'insert into ##RowCount ([TABLE NAME],[RECORD COUNT]) select ''?'' tableName, count(*) dataCount from ?'
--查询结果
SELECT *
FROM ##RowCount
ORDER BY [TABLE NAME]
DROP TABLE ##RowCount
--统计一个数据库中所有表记录的数量
-- 最近公司的数据库发现有表的数据被弄掉了,有些数据表记录为0,于是想找出此数据库中到底有哪些数据表的记录都为0以缩小分析范围,可使用如下的sql statement:
CREATE TABLE #tmptb
(
tbname sysname ,
tbrows INT ,
tbREserved VARCHAR(10) ,
tbData VARCHAR(10) ,
tbIndexSize VARCHAR(10) ,
tbUnUsed VARCHAR(10)
)
INSERT INTO #tmptb
EXEC sp_MSForEachTable 'EXEC sp_spaceused ''?'''
SELECT *
FROM #tmptb
--列出所有表的情况
SELECT tbrows ,
tbname
FROM #tmptb
WHERE tbrows = 0 --列出记录数据为0的表
ORDER BY tbname
DROP TABLE #tmptb
--其中
--tbname 表名
--tbrows 记录数
--tbREserved 保留空间
--tbData 使用空间
--tbIndexSize 索引使用空间
--tbUnUsed 未用空间
--SQLServer遍历数据库所有表及统计表数据总数:
DECLARE @TableName VARCHAR(255);
CREATE TABLE #GetRecordingTempTable
(
[id] [INT] IDENTITY(1, 1)
NOT NULL ,
[TableName] VARCHAR(255) NOT NULL ,
[RecordingCount] INT
);
DECLARE Table_Cursor CURSOR
FOR
SELECT [name]
FROM sysobjects
WHERE xtype = 'U';
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @TableName;
while ( @@FETCH_STATUS = 0 )
BEGIN
EXEC('INSERT INTO #GetRecordingTempTable ([TableName],[RecordingCount]) SELECT '''+@TableName+''', COUNT(0) FROM ['+@TableName+'];');
FETCH NEXT FROM Table_Cursor INTO @TableName;
END
CLOSE Table_Cursor;
deallocate Table_Cursor;
SELECT [TableName] AS [表名称] ,
[RecordingCount] AS [总记录数]
FROM #GetRecordingTempTable
ORDER BY [TableName];
DROP TABLE #GetRecordingTempTable;
GO
我们都知道用聚合函数count()可以统计表的行数。如果需要统计数据库每个表各自的行数(DBA可能有这种需求),用count()函数就必须为每个表生成一个动态SQL语句并执行,才能得到结果。以前在互联网上看到有一种很好的解决方法,忘记出处了,写下来分享一下。该方法利用了sysindexes 系统表提供的rows字段。rows字段记录了索引的数据级的行数。解决方法的代码如下:
select schema_name(t.schema_id) as [Schema], t.name as TableName,i.rows as [RowCount]
from sys.tables as t, sysindexes as i
where t.object_id = i.id and i.indid <=1
该方法连接了sys.tables视图,从中找出表名和schema_id,再通过schema_name函数获取表的架构名。筛选条件i.indid <=1 只选聚集索引或者堆,每个表至少有一个堆或者聚集索引,从而保证为每个表返回一行。
该方法的优点有:
运行速度非常快。
由于不访问用户表,不会在用户表上放置锁,不会影响用户表的性能。
可以将该查询写成子查询、CTE或者视图,与其它查询结合使用。
相关阅读
所谓的软性广告是一篇促进特定产品推广的文章。从这个角度来看,可以实现这种效果的文章可以称为软性广告。软性广告营销是一个系统
pl/sql developer登录oracle初始化失败问题
使用pl/sql developer客户端访问64位的oracle数据库时,不能直接访问,需要中间件32位的oracle客户端。在pl/sql需要配置加载文
mysql中tinyint(1)与tinyint(2)的区别
tinyint 型的字段如果设置为UNSIGNED类型,只能存储从0到255的整数,不能用来储存负数。tinyint 型的字段如果不设置UNSIGNED类型,存
昨天晚上打开java项目准备联系几个功能,linux里面启动成功,tomcat也运行了,正在享受这个过程的时候,结果mysql显示cant connect l
adb server is out of date. killing完美解决
今天,久未出现的著名的“adb server is out of date. killing”又发生了,在此,将解决方法记下,以便日后查看。 1. 错误信息: C:\Use