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'
*/

不允许评论