sqlserver查看表占用空间大小

1、查看某个数据库,直接执行存储过程sp_spaceused即可
exec sp_spaceused;


2、查看某个表,在存储过程后面加上表名即可
EXEC sp_spaceused 'T_XXXXX';


3、查看该数据库中的所有表,可以写一个存储过程,然后执行即可
存储过程如下:

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- 说明:更新查询数据库中各表的大小,结果存储到数据表中

-- =============================================

CREATE PROCEDURE [dbo].[P_UpdateTableSpaceInfo]

AS

BEGIN

--查询是否存在结果存储表

IF NOT EXISTS (SELECT * FROM sysobjects where id = OBJECT_ID(N'temp_tableSpaceInfo')

AND OBJECTPROPERTY(id, N'IsUserTable') = 1)

BEGIN

--不存在则创建

CREATE TABLE temp_tableSpaceInfo

(name NVARCHAR(128),

rows char(11),

reserved VARCHAR(18),

data VARCHAR(18),

index_size VARCHAR(18),

unused VARCHAR(18))

END

--清空数据表

DELETE FROM temp_tableSpaceInfo

--定义临时变量在遍历时存储表名称

DECLARE @tablename VARCHAR(255)

--使用游标读取数据库内所有表表名

DECLARE table_list_cursor CURSOR FOR

SELECT name FROM sysobjects

WHERE OBJECTPROPERTY(id, N'IsTable') = 1 AND name NOT LIKE N'#%%' ORDER BY name

--打开游标

OPEN table_list_cursor

--读取第一条数据

FETCH NEXT FROM table_list_cursor INTO @tablename

--遍历查询到的表名

WHILE @@FETCH_STATUS = 0

BEGIN

--检查当前表是否为用户表

IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(@tablename)

AND OBJECTPROPERTY(id, N'IsUserTable') = 1)

BEGIN

--当前表则读取其信息插入到表格中

EXECUTE sp_executesql N'INSERT INTO temp_tableSpaceInfo

EXEC sp_spaceused @tbname', N'@tbname varchar(255)', @tbname = @tablename

END

--读取下一条数据

FETCH NEXT FROM table_list_cursor INTO @tablename

END

--释放游标

CLOSE table_list_cursor

DEALLOCATE table_list_cursor

END

GO

执行,查看:

EXEC P_UpdateTableSpaceInfo

SELECT * FROM temp_tableSpaceInfo;

posted @ 2022-08-01 14:37  最萌小胡胡  阅读(6863)  评论(0编辑  收藏  举报