查詢sql資料庫中表占用的空間大小

2021-06-20 10:58:26 字數 2601 閱讀 6588

1.sql統計資料,大量事務操作後可能不准

exec sp_spaceused '表名'   

2.準確的表空間大小,但可能會花些統計時間

exec sp_spaceused '表名', true  

3.資料庫大小查詢

exec sp_spaceused            

4.所有使用者表空間錶小,sql統計資料,,大量事務操作後可能不准

exec sp_msforeachtable "exec sp_spaceused '?'"  

5. 所有使用者表空間錶小,大資料庫慎用

exec sp_msforeachtable "exec sp_spaceused '?',true"    

create table #t(

name varchar(200), 

rows int, 

reserved varchar(25), 

data varchar(25), 

index_size varchar(25), 

unused varchar(25))

exec sp_msforeachtable "insert into #t exec sp_spaceused '?'" 

select top 100 * from #t order by rows desc

drop table #t

1)說明

系統儲存過程sp_msforeachtable和sp_msforeachdb,是微軟提供的兩個不公開的儲存過程,從ms sql 6.5開始。

存放在sql server的master資料庫中。

2)引數說明:

@command1 nvarchar(2000),          --第一條執行的sql指令

@replacechar nchar(1) = n'?',      --指定的佔位符號

@command2 nvarchar(2000)= null,    --第二條執行的sql指令

@command3 nvarchar(2000)= null,    --第三條執行的sql指令

@whereand nvarchar(2000)= null,    --可選條件來選擇表

@precommand nvarchar(2000)= null, --執行指令前的操作(類似控制項的觸發前的操作)

@postcommand nvarchar(2000)= null --執行指令後的操作(類似控制項的觸發後的操作)

3)舉例

--統計資料庫裡每個表的詳細情況

exec sp_msforeachtable @command1="sp_spaceused '?'"

--獲得每個表的記錄數和容量:

exec sp_msforeachtable @command1="print '?'",

@command2="sp_spaceused '?'",

@command3= "select count(*) from ? "

--獲得所有的資料庫的儲存空間:

exec sp_msforeachdb   @command1="print '?'",

@command2="sp_spaceused "

--檢查所有的資料庫

exec sp_msforeachdb   @command1="print '?'",

@command2="dbcc checkdb (?) "

--更新pubs資料庫中已t開頭的所有表的統計:

exec sp_msforeachtable @whereand="and name like 't%'",

@replacechar='*',

@precommand="print 'updating statistics.....' print ''",

@command1="print '*' update statistics * ",

@postcommand= "print''print 'complete update statistics!'"

--刪除當前資料庫所有表中的資料

sp_msforeachtable @command1='delete from ?'

sp_msforeachtable @command1 = "truncate table ?"

4)引數@whereand的用法

@whereand引數在儲存過程中起到指令條件限制的作用,具體的寫法如下:

@whereend,可以這麼寫 @whereand=' and o.name in (''table1'',''table2'',.......)'

例如:我想更新table1/table2/table3中note列為null的值

sp_msforeachtable @command1='update ? set note='''' where note is null',@whereand=' and o.name in (''table1'',''table2'',''table3'')'

5)"?"在儲存過程的特殊用法,造就了這兩個功能強大的儲存過程

這裡"?"的作用,相當於dos命令中、以及我們在windows下搜尋檔案時的萬用字元的作用。

查詢sql資料庫中表占用的空間大小

1.exec sp spaceused 表名 sql統計資料,大量事務操作後可能不准 2.exec sp spaceused 表名 true 準確的表空間大小,但可能會花些統計時間 3.exec sp spaceused 資料庫大小查詢 4.exec sp msforeachtable exec s...

查詢SQL資料庫中表占用的空間大小

exec sp spaceused 表名 sql統計資料,大量事務操作後可能不准 exec sp spaceused 表名 true 準確的表空間大小,但可能會花些統計時間 exec sp spaceused 資料庫大小查詢 exec sp msforeachtable exec sp spaceu...

查詢SQL Server中表占用的空間方法

詢sql server中表占用的空間方法 databaseadmin 17 七月,2006 04 10 如何來查詢sql server中資料庫的各個表所占用的空間?下面來介紹一下兩種用來方法。方法1 select object name id tablename,8 reserved 1024 re...