在SQLSERVER,简单的组合sp_spaceused和sp_MSforeachtable这两个存储过程,可以方便的统计出用户数据表的大小,包括记录总数和空间占用情况,非常实用,在SqlServer2K和SqlServer2005中都测试通过。
/*
1. exec sp_spaceused ‘表名’ (SQL统计数据,大量事务操作后可能不准)
2. exec sp_spaceused ‘表名’, true (更新表的空间大小,准确的表空大小,但可能会花些统计时间)
3. exec sp_spaceused (数据库大小查询)
4. exec sp_MSforeachtable “exec sp_spaceused ‘?'” (所有用户表空间表小,SQL统计数据,,大量事务操作后可能不准)
5. exec sp_MSforeachtable “exec sp_spaceused ‘?’,true” (所有用户表空间表小,大数据库慎用)
*/
create table #t(name varchar ( 255 ), rows bigint , reserved varchar ( 20 ), data varchar ( 20 ), index_size varchar ( 20 ), unused varchar ( 20 ))
exec sp_MSforeachtable ” insert into #t exec sp_spaceused ‘ ? ‘ ”
select * from #t
drop table #t
另外,还有sp_MSforeachdb可以遍历所有数据库,使用方法详见SQL帮助。
方法2:
SET NOCOUNT ON
DECLARE @tablename VARCHAR(255)
DECLARE table_list_cursor服务器托管网 CURSOR
FOR
SELECT name
FROM sys.tables
ORDER BY name
–打开游标
OPEN table_list_cursor
–读取第一条数据
FETCH NEXT FROM table_list_cursor INTO @tablename
SELECT CONVERT(NVARCHAR(255), ”) AS name ,
1 AS [rows] ,
CONVERT(NVARCHAR(255), ”) AS ‘res’ ,
CONVERT(NVARCHAR(255), ”) AS [data] ,
CONVERT(NVARCHAR(255), ”) AS indexs ,
CONVERT(NVARCHAR(255), ”) AS unuse
INTO #temp
–遍历查询到的表名
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO #temp
EXEC sp_spaceused @tablename
FETCH NEXT FROM table_list_cursor INTO @tablename
END
–释放游标
CLOSE table_list_cursor
DEALLOCATE table_list_cursor
SELECT *
FROM #temp order by len(res) desc;
DROP TABLE服务器托管网 #temp
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: SpringBoot2.7升级到3.0的实践分享
背景 最近把项目中的技术框架做一次升级,最重要的就是SpringBoot从2.7.x升级到3.0.x,当然还会有一些周边的框架也会连带着升级,比如Mybatis Plus,SpringCloud等,话不多说直接看看有哪些事情要做。 具体事项 主要分两类,第一服…