永不落伍 发表于 2018-10-18 06:32:15

查看 SQL Server 2000 数据表的大小

SQL Server查看所有表大小、表行数和占用空间信息
  一、查看表名和对应的数据行数
  selecta.name as '表名',b.rows as '表数据行数'
  from sysobjects a inner join sysindexes b
  on a.id = b.id
  where   a.type = 'u'
  and b.indid in (0,1)
  --and a.name not like 't%'
  order by b.rows desc
  二、查看表名和表占用空间信息
  --判断临时表是否存在,存在则删除重建

  if exists(select 1 from tempdb..sysobjects where>  drop table #tabName
  go
  create table #tabName(
  tabname varchar(100),
  rowsNum varchar(100),
  reserved varchar(100),
  data varchar(100),
  index_size varchar(100),
  unused_size varchar(100)
  )
  declare @name varchar(100)
  declare cur cursor for
  select name from sysobjects where xtype='u' order by name
  open cur
  fetch next from cur into @name
  while @@fetch_status=0
  begin
  insert into #tabName
  exec sp_spaceused @name
  --print @name
  fetch next from cur into @name
  end
  close cur
  deallocate cur
  select tabname as '表名',rowsNum as '表数据行数',reserved as '保留大小',data as '数据大小',index_size as '索引大小',unused_size as '未使用大小'
  from #tabName
  --where tabName not like 't%'
  order by cast(rowsNum as int) desc
  --系统存储过程说明:
  --sp_spaceused 该存储过程在系统数据库master下。
  exec sp_spaceused '表名' --该表占用空间信息
  exec sp_spaceused         --当前数据库占用空间信息
  以下的文章主要是教会你如何正确查看 SQL Server 2000 数据表的大小,下面这几条相关的语句,可以返回每个SQL Server 2000 数据表大小,以下就是具体方案的描述,希望在你今后的学习中会有所帮助。
  create table tmp (name varchar(50),rows int,reserved varchar(50),data varchar(50),index_size varchar(50),unused varchar(50))insert into tmp (name,rows,reserved,data,index_size,unused) exec sp_msforeachTable @Command1="sp_spaceused '?'"sp_spaceused 't_vehicle'select * from tmp order by data descdrop table tmp 看单个表, 占用数据的情况
  sp_spaceused '表名'
  查看整个数据库所有表占用空间的情况 但发现从sysindexes中取表, 会少一部分SQL Server 2000 数据表(无主键,无索引的表)
  select object_name(id) tablename,8*reserved/1024 reserved,rtrim(8*dpages/1024)+'Mb' used,8*(reserved-dpages)/1024 unused,8*dpages/1024-rows/1024*minlen/1024 free,rows,* from sysindexeswhere indid=1 order by reserved desc 查看整个数据库所有表占用空间的情况 但看起来比较麻烦
  exec sp_MSforeachtable "exec sp_spaceused '?'"
  drop table #Data
  drop table #DataNew
  create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_size varchar(100),unused varchar(100))
  declare @name varchar(100)
  declare cur cursorfor
  select name from sysobjects where xtype='u' order by name
  open cur
  fetch next from cur into @name
  while @@fetch_status=0
  begin
  insert into #data
  exec sp_spaceused   @name
  print @name
  fetch next from cur into @name
  end
  close cur
  deallocate cur
  create table #DataNew(name varchar(100),row int,reserved int,data int,index_size int,unused int)
  insert into #dataNew
  select name,convert(int,row) as row,convert(int,replace(reserved,'KB','')) as reserved,convert(int,replace(data,'KB','')) as data,
  convert(int,replace(index_size,'KB','')) as index_size,convert(int,replace(unused,'KB','')) as unused from #data
  select * from #dataNew order by data desc

页: [1]
查看完整版本: 查看 SQL Server 2000 数据表的大小