SQL - 如何使用 T-SQL 來顯示資料庫中資料表空間使用情形?
有些朋友詢問:如何使用 T-SQL 來知道資料庫中資料表空間使用情形?
可以使用下列的範例來查詢,也可以再搭配排程及 e-mail 的功能,找擴充它的功能。
當然也可以再寫的更複雜一些,讓它自動查詢整台 SQL Server 中所有的資料庫中的所有資料表的使用情形。
-- 此範例也支援中文的資料庫名稱及中文的資料表名稱
IF exists (SELECT * FROM sys.objects WHERE object_id = object_id(N'[dbo].[DisplayDatabaseSpaceUsed]') and OBJECTPROPERTY(object_id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[DisplayDatabaseSpaceUsed]
GO
CREATE PROCEDURE DisplayDatabaseSpaceUsed
@SourceDB NVARCHAR(254)
AS
SET NOCOUNT ON
DECLARE @sql NVARCHAR(500)
CREATE TABLE #tables(tableName NVARCHAR(254))
SELECT @sql = N'INSERT #tables SELECT TABLE_NAME FROM [' + @SourceDB + '].INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ''BASE TABLE'''
EXEC (@sql)
CREATE TABLE #SpaceUsed (tableName NVARCHAR(254), rows varchar(11), reserved varchar(18), data varchar(18), index_size varchar(18), unused varchar(18))
DECLARE @tableName NVARCHAR(254)
SELECT @tableName = N''
WHILE EXISTS (SELECT * FROM #tables WHERE tableName > @tableName)
BEGIN
SELECT @tableName = MIN(tableName) FROM #tables WHERE tableName > @tableName
SELECT @sql = 'EXEC ' + @SourceDB + '..SP_EXECUTESQL N''INSERT #SpaceUsed EXEC SP_SPACEUSED [' + @tableName + ']'''
EXEC (@sql)
end
SELECT * FROM #SpaceUsed
DROP TABLE #tables
DROP TABLE #SpaceUsed
GO
/*
-- 請修改資料庫名稱
EXEC DisplayDatabaseSpaceUsed N'中文資料庫名稱'
EXEC DisplayDatabaseSpaceUsed 'Northwind'
*/
執行結果: