【www.kwkids.com--公务员类考试】
其实只要使用系统内置的存储过程sp_spaceused就可以得到表的相关信息如:sp_spaceused "tablename"
以下是为了方便写的一个存储过程,目的是把当前的所有表的相关信息全部都保存在一个指定的表里面
CREATEPROCEDUREget_tableinfoAS
ifnotexists(select*fromdbo.sysobjectswhereid=object_id(N"[dbo].[tablespaceinfo]")andOBJECTPROPERTY(id,N"IsUserTable")=1)
createtable tablespaceinfo --创建结果存储表
(nameinfovarchar(50),
rowsinfoint,reservedvarchar(20),
datainfovarchar(20) ,
index_sizevarchar(20),
unusedvarchar(20))
deletefromtablespaceinfo--清空数据表
declare@tablenamevarchar(255) --表名称
declare@cmdsqlvarchar(500)
DECLAREInfo_cursorCURSORFOR
selecto.name fromdbo.sysobjectsowhereOBJECTPROPERTY(o.id,N"IsTable")=1
ando.namenotlikeN"#%%" orderbyo.name
OPENInfo_cursor
FETCHNEXTFROMInfo_cursor
INTO@tablename
WHILE@@FETCH_STATUS=0
BEGIN
ifexists(select*fromdbo.sysobjectswhereid=object_id(@tablename)andOBJECTPROPERTY(id,N"IsUserTable")=1)
executesp_executesql
N"insertintotablespaceinfo execsp_spaceused@tbname",
N"@tbnamevarchar(255)",
@tbname=@tablename
FETCHNEXTFROMInfo_cursor
INTO@tablename
END
CLOSEInfo_cursor
DEALLOCATEInfo_cursor
GO
执行存储过程
exec get_tableinfo
查询运行该存储过程后得到的结果
select *
from tablespaceinfo
order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc