sql查看所有表大小的方法。
代码:
declare @id intdeclare @type character(2) declare @pages int declare @dbname sysnamedeclare @dbsize dec(15,0)declare @bytesperpage dec(15,0)declare @pagesperMB dec(15,0)create table #spt_space([objid] int null,[rows] int null,[reserved] dec(15) null,[data] dec(15) null,[indexp] dec(15) null,[unused] dec(15) null)set nocount on-- Create a cursor to loop through the user tablesdeclare c_tables cursor forselect id from sysobjects where xtype = 'U'open c_tables fetch next from c_tables into @idwhile @@fetch_status = 0begin --- www.jbxue.com/* Code from sp_spaceused */insert into #spt_space (objid, reserved)select objid = @id, sum(reserved)from sysindexeswhere indid in (0, 1, 255) and id = @idselect @pages = sum(dpages)from sysindexeswhere indid < 2and id = @idselect @pages = @pages + isnull(sum(used), 0)from sysindexeswhere indid = 255 and id = @idupdate #spt_space set data = @pageswhere objid = @id/* index: sum(used) where indid in (0, 1, 255) - data */update #spt_spaceset indexp = (select sum(used)from sysindexeswhere indid in (0, 1, 255)and id = @id) - datawhere objid = @id/* unused: sum(reserved) - sum(used) where indid in (0, 1, 255) */update #spt_spaceset unused = reserved - (select sum(used)from sysindexeswhere indid in (0, 1, 255) and id = @id)where objid = @idupdate #spt_space set [rows] = i.[rows]from sysindexes iwhere i.indid < 2 and i.id = @id and objid = @idfetch next from c_tables into @idendselect TableName = (select left(name,60) from sysobjects where id = objid),[Rows] = convert(char(11), rows),ReservedKB = ltrim(str(reserved * d.low / 1024.,15,0) + ' ' + 'KB'),DataKB = ltrim(str(data * d.low / 1024.,15,0) + ' ' + 'KB'),IndexSizeKB = ltrim(str(indexp * d.low / 1024.,15,0) + ' ' + 'KB'),UnusedKB = ltrim(str(unused * d.low / 1024.,15,0) + ' ' + 'KB')from #spt_space, master.dbo.spt_values dwhere d.number = 1and d.type = 'E'order by reserved descdrop table #spt_spaceclose c_tablesdeallocate c_tables