如何获取SQLServer数据库里表的占用容量大小?
其实只要使用系统内置的存储过程sp_spaceused就可以得到表的相关信息
如:sp_spaceused'tablename'
step1:先写一个存储过程,把当前的所有表的相关信息全部都保存在一个指定的表里面
CREATEPROCEDUREget_tableinfoAS
ifnotexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[tablespaceinfo]')andOBJECTPROPERTY(id,N'IsUserTable')=1)
createtabletablespaceinfo--创建结果存储表
(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'insertintotablespaceinfoexecsp_spaceused@tbname',
N'@tbnamevarchar(255)',
@tbname=@tablename
FETCHNEXTFROMInfo_cursor
INTO@tablename
END
CLOSEInfo_cursor
DEALLOCATEInfo_cursor
GO
step2:执行存储过程
execget_tableinfo
查询运行该存储过程后得到的结果
select*
fromtablespaceinfo
orderbycast(left(ltrim(rtrim(reserved)),len(ltrim(rtrim(reserved)))-2)asint)desc
其实只要使用系统内置的存储过程sp_spaceused就可以得到表的相关信息
如:sp_spaceused'tablename'
step1:先写一个存储过程,把当前的所有表的相关信息全部都保存在一个指定的表里面
CREATEPROCEDUREget_tableinfoAS
ifnotexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[tablespaceinfo]')andOBJECTPROPERTY(id,N'IsUserTable')=1)
createtabletablespaceinfo--创建结果存储表
(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'insertintotablespaceinfoexecsp_spaceused@tbname',
N'@tbnamevarchar(255)',
@tbname=@tablename
FETCHNEXTFROMInfo_cursor
INTO@tablename
END
CLOSEInfo_cursor
DEALLOCATEInfo_cursor
GO
step2:执行存储过程
execget_tableinfo
查询运行该存储过程后得到的结果
select*
fromtablespaceinfo
orderbycast(left(ltrim(rtrim(reserved)),len(ltrim(rtrim(reserved)))-2)asint)desc
本文介绍了获取SQL Server数据库里表的占用容量大小的方法。通过使用系统内置存储过程sp_spaceused,先编写存储过程将所有表的相关信息保存到指定表中,再执行该存储过程,最后查询结果并按保留空间降序排列。

被折叠的 条评论
为什么被折叠?



