檢視sql server每個表佔用的空間大小
阿新 • • 發佈:2019-02-03
--判斷是否存在結果儲存表[tablespaceinfo]。如果不存在,則建立ifnot exists
(select*from dbo.sysobjects
where id = object_id(N'[dbo].[tablespaceinfo]')and OBJECTPROPERTY(id, N'IsUserTable')=1)
create table tablespaceinfo
(
nameinfo varchar(50),
rowsinfo int, reserved varchar(20),
datainfo varchar(20),
index_size varchar (20),
unused varchar(20))deletefrom tablespaceinfo --清空原有資料表
declare @tablename varchar(255)--表名稱 變數
declare @cmdsql varchar(500)--執行命令變數--申明遊標 取出庫中所有表名
DECLARE Info_cursor CURSOR FOR
select o.name
from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsTable')=1and o.name not like N'#%%' order by o.name
OPEN Info_cursor
FETCH NEXT FROM Info_cursor
INTO @tablename
WHILE @@FETCH_STATUS=0BEGIN--如果是使用者表if exists
(select*from dbo.sysobjects
where id = object_id(@tablename)and OBJECTPROPERTY(id, N'IsUserTable')=1)--說明:sp_executesql 執行可以多次重複使用或動態生成的Transact-SQL 語句或批處理-- sp_spaceused 顯示行數、保留的磁碟空間以及當前資料庫中的表、索引檢視 --或ServiceBroker佇列所使用的磁碟空間,或顯示由整個資料庫保留和使用的磁碟空間。
execute sp_executesql
N'insert into tablespaceinfo exec sp_spaceused @tbname',
N'@tbname varchar(255)',@tbname=@tablename
FETCH NEXT FROM Info_cursor
INTO @tablenameEND
CLOSE Info_cursor--閉關遊標
DEALLOCATE Info_cursor--釋放遊標
GO
--顯示資料庫資訊
sp_spaceused @updateusage='TRUE'--顯示錶資訊select*from tablespaceinfo
order by cast(left(ltrim(rtrim(reserved)), len(ltrim(rtrim(reserved)))-2)asint) desc