背景:项目开发中的系统维护,需要知道数据库的相关信息,诸如有多少表,以及所占磁盘空间等信息
第一个知识点:首先是数据库sysbojects表
select * from sysobjects 查看结果,即可初步得知这张表作用,记录信息
常用xtype类型
s表示系统表 system table
u表示用户表 user table
fn表示标量函数 scalar function
it表示Inter table
sq表示服务队列
第二个知识点:object_id()获取某张表格的id
常见用法:
select object_id('tablename')
select * from sysobjects where parent_obj=object_id('tablename')
获取某张表格所有属性
第三个知识点:exec sp_spaceused 'Program'
获取某张表格大小等信息,通过一个内置的系统存储过程完成
第四个知识点:tempdb和dbo
所有关于 临时表,表变量都是放在这个数据库中
因此新建一张临时表之前,需要判断是否存在
最终写出一个存储过程,获取数据库所有表相关信息
if exists(select 1 from tempdb.dbo.sysobjects where id=object_id('tempdb.dbo.#tabName') and xtype='u')
drop table #tabName
go
create table #tabName(
tabname varchar(100),
rowsNum varchar(100),
reserved varchar(100),
data varchar(100),
index_size varchar(100),
unused_size varchar(100)
)
declare @name varchar(100)
declare cur cursor for
select name from sysobjects where xtype='u' order by name
open cur
fetch next from cur into @name
while @@fetch_status=0
begin
insert into #tabName
exec sp_spaceused @name
--print @name
fetch next from cur into @name
end
close cur
deallocate cur
-- 已经经过优化
select tabname as '表名',rowsNum as '表数据行数',reserved as '保留大小',convert(int,SUBSTRING(data,0,LEN(data)-2)) size, data as '数据大小',index_size as '索引大小',unused_size as '未使用大小'
from #tabName ORDER BY size desc