主页 > 手机  > 

SQL表信息|统计|脚本


介绍

统计多个 SQL Server 实例上多个数据库的表大小、最后修改时间和行数,可以使用以下的 SQL 查询来获取这些信息。

脚本

示例脚本:

DECLARE @Query NVARCHAR(MAX) -- 创建一个临时表用于存储结果 CREATE TABLE #TableSizes ( DatabaseName NVARCHAR(255), SchemaName NVARCHAR(255), TableName NVARCHAR(255), RowCount BIGINT, TotalSpaceUsedMB DECIMAL(18,2), LastModifiedDateTime DATETIME ) -- 构建动态SQL查询 SET @Query = '' -- 获取数据库列表 当数据库联机时才执行 SELECT @Query = @Query + 'IF DATABASEPROPERTYEX(''' + name + ''', ''Status'') = ''ONLINE'' ' + 'BEGIN ' + 'USE [' + name + ']; ' + 'INSERT INTO #TableSizes ' + 'SELECT ' + QUOTENAME(name, '''') + ' AS DatabaseName, ' + 'SCHEMA_NAME(schema_id) AS SchemaName, ' + 't.name AS TableName, ' + 'SUM(p.rows) AS RowCount, ' + 'CONVERT(DECIMAL(18,2), SUM(a.total_pages) * 8 / 1024.0) AS TotalSpaceUsedMB, ' + 'MAX(last_user_update) AS LastModifiedDateTime ' + 'FROM ' + QUOTENAME(name) + '.sys.tables t ' + 'INNER JOIN ' + QUOTENAME(name) + '.sys.indexes i ON t.object_id = i.object_id ' + 'INNER JOIN ' + QUOTENAME(name) + '.sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id ' + 'INNER JOIN ' + QUOTENAME(name) + '.sys.allocation_units a ON p.partition_id = a.container_id ' + 'WHERE t.is_ms_shipped = 0 ' + 'GROUP BY t.name, SCHEMA_NAME(schema_id); ' + 'END ' FROM sys.databases WHERE database_id > 4 -- Exclude system databases -- 执行查询 EXEC sp_executesql @Query -- 查询结果 SELECT * FROM #TableSizes -- 删除临时表 DROP TABLE #TableSizes

update 20240206 检查数据库状态或使用 DATABASEPROPERTYEX 函数来完成。 仅查询状态为 “ONLINE” 的数据库,并将结果存储在临时表中。其他数据库(如 “OFFLINE” 或 “SUSPECT”)将被排除在外。

Ending


~喜欢的话,请收藏 | 关注(✪ω✪)~ ~万一有趣的事还在后头呢,Fight!!(o^-^)~''☆ミ☆ミ~……
标签:

SQL表信息|统计|脚本由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“SQL表信息|统计|脚本