背景:項目開發中的系統維護,需要知道數據庫的相關信息,諸如有多少表,以及所佔磁盤空間等信息
第一個知識點:首先是數據庫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