如何取得一个数据库中所有的表的大小
2011-08-15 14:24
519 查看
一直使用以下的SQL
SET NOCOUNT ON
-- Table row counts and sizes.
CREATE TABLE #t
(
[name] NVARCHAR(128),
[rows] CHAR(11),
reserved VARCHAR(18),
data VARCHAR(18),
index_size VARCHAR(18),
unused VARCHAR(18)
)
INSERT #t EXEC sp_msForEachTable 'EXEC sp_spaceused ''?'''
-- Order by size (need to remove the KB sign).
SELECT *
FROM #t ORDER by cast(SUBSTRING(reserved, 1, LEN(reserved)-2) as Int) desc
DROP TABLE #t
但是今天碰到table名中含有schemas,就看上去怪怪的,
只好改用下面的SQL,还来不及检查发生了什么事,只好头痛医头脚痛医脚
declare @RowCount int, @tablename varchar(100)
declare @Tables table (
PK int IDENTITY(1,1),
tablename varchar(100),
processed bit
)
INSERT into @Tables (tablename)
SELECT '['+SCHEMA_NAME(schema_id)+'].['+name+']' AS TableName
FROM sys.tables order by TABLENAME asc
declare @Space table (
[id] [int] IDENTITY(1,1) NOT NULL,
name varchar(100), rows nvarchar(100), reserved varchar(100), data char(100), index_size varchar(100), unused varchar(100)
)
select top 1 @tablename = tablename from @Tables where processed is null
SET @RowCount = 1
WHILE (@RowCount <> 0)
BEGIN
print @tablename
insert into @Space exec sp_spaceused @tablename
update @Space set name = @tablename where id = (select top 1 MAX(id) as no from @Space)
update @Tables set processed = 1 where tablename = @tablename
select top 1 @tablename = tablename from @Tables where processed is null
SET @RowCount = @@RowCount
END
update @Space set data = replace(data, 'KB', '')
update @Space set data = cast(data as decimal(10,0)) / 1000
update @Space set data = cast(data as decimal(10,2))
update @Space set reserved = replace(reserved, 'KB', '')
update @Space set reserved = cast(reserved as decimal(10,0)) / 1000
update @Space set reserved = cast(reserved as decimal(10,2))
select name as Tablename, rows, replace(data,' ','') + 'MB' as used, replace(reserved,' ','') + 'MB' as [Reserved] ,index_size,unused from @Space order by convert(decimal(10,2),data) desc
SET NOCOUNT ON
-- Table row counts and sizes.
CREATE TABLE #t
(
[name] NVARCHAR(128),
[rows] CHAR(11),
reserved VARCHAR(18),
data VARCHAR(18),
index_size VARCHAR(18),
unused VARCHAR(18)
)
INSERT #t EXEC sp_msForEachTable 'EXEC sp_spaceused ''?'''
-- Order by size (need to remove the KB sign).
SELECT *
FROM #t ORDER by cast(SUBSTRING(reserved, 1, LEN(reserved)-2) as Int) desc
DROP TABLE #t
但是今天碰到table名中含有schemas,就看上去怪怪的,
只好改用下面的SQL,还来不及检查发生了什么事,只好头痛医头脚痛医脚
declare @RowCount int, @tablename varchar(100)
declare @Tables table (
PK int IDENTITY(1,1),
tablename varchar(100),
processed bit
)
INSERT into @Tables (tablename)
SELECT '['+SCHEMA_NAME(schema_id)+'].['+name+']' AS TableName
FROM sys.tables order by TABLENAME asc
declare @Space table (
[id] [int] IDENTITY(1,1) NOT NULL,
name varchar(100), rows nvarchar(100), reserved varchar(100), data char(100), index_size varchar(100), unused varchar(100)
)
select top 1 @tablename = tablename from @Tables where processed is null
SET @RowCount = 1
WHILE (@RowCount <> 0)
BEGIN
print @tablename
insert into @Space exec sp_spaceused @tablename
update @Space set name = @tablename where id = (select top 1 MAX(id) as no from @Space)
update @Tables set processed = 1 where tablename = @tablename
select top 1 @tablename = tablename from @Tables where processed is null
SET @RowCount = @@RowCount
END
update @Space set data = replace(data, 'KB', '')
update @Space set data = cast(data as decimal(10,0)) / 1000
update @Space set data = cast(data as decimal(10,2))
update @Space set reserved = replace(reserved, 'KB', '')
update @Space set reserved = cast(reserved as decimal(10,0)) / 1000
update @Space set reserved = cast(reserved as decimal(10,2))
select name as Tablename, rows, replace(data,' ','') + 'MB' as used, replace(reserved,' ','') + 'MB' as [Reserved] ,index_size,unused from @Space order by convert(decimal(10,2),data) desc
相关文章推荐
- 如何取得一个浏览器浏览区域的大小
- 如何快速取得一个二进制状态的所有子状态
- 如何获取数据库中某一个表的所有字段
- SQL : 如何完全复制一个服务器上的数据库A到另一个服务器上的数据库B(包括库A的所有表、试图、存储过程等等)
- VFP如何控制一个窗口的所有控件的大小随窗口的变化而变化
- SQLSERVER如何获取一个数据库中的所有表的名称、一个表中所有字段的名称
- SQLSERVER如何获取一个数据库中的所有表的名称、一个表中所有字段的名称
- SQL Server中如何统计数据库中所有用户表所占空间大小?
- SQLSERVER如何获取一个数据库中的所有表的名称、一个表中所有字段的名称
- 如何取得一个表的所有字段名用逗号分割
- SQLSERVER如何获取一个数据库中的所有表的名称、一个表中所有字段的名称
- 如何快速取得一个二进制状态的所有子状态
- SQLSERVER如何获取一个数据库中的所有表的名称、一个表中所有字段的名称
- 如何取得一个表的所有字段名用逗号分割
- SQLSERVER如何获取一个数据库中的所有表的名称、一个表中所有字段的名称
- SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database)
- 如何把Domino所有用户接收和发送的邮件都自动地拷贝到一个数据库中
- 如何将一个表格的所有数据存到数据库的一个字段里,并如何将这一个数据字段里的数据填充到前端表格里
- 如何判断一个C++对象是否在堆上(通过GetProcessHeaps取得所有堆,然后与对象地址比较即可),附许多精彩评论
- 查询一个数据库中所有表的大小并排序