查询所有数据库的表大小

时间:2014-04-09 22:11:01

标签: sql sql-server database

我目前是JR。 DBA和SQL Server上的一个巨大的菜鸟。

我的大多数数据库中都有一个表,我需要找到一种方法从包含它的所有数据库中查询该表的大小。

例如:

dbA Table1大小 dbB Table1大小 等

我找到了多个查询,它们会从一个数据库中提供表,但不是全部。我还发现了一个查询,它将收集所有数据库中的表,但不会给我大小。

下面是我发现的列出DBName,我需要的特定表,但没有大小。

SET NOCOUNT ON
DECLARE @AllTables table (DbName sysname,SchemaName sysname, TableName sysname)
DECLARE
     @SearchDb nvarchar(200)
    ,@SearchSchema nvarchar(200)
    ,@SearchTable nvarchar(200)
    ,@SQL nvarchar(4000)
SET @SearchDb='%'
SET @SearchSchema='%'
SET @SearchTable='%docs%'
SET @SQL='select ''?'' as DbName, s.name as SchemaName, t.name as TableName from [?].sys.tables t inner join sys.schemas s on t.schema_id=s.schema_id WHERE ''?'' LIKE '''+@SearchDb+''' AND s.name LIKE '''+@SearchSchema+''' AND t.name LIKE '''+@SearchTable+''''


INSERT INTO @AllTables (DbName, SchemaName, TableName)
    EXEC sp_msforeachdb @SQL
SET NOCOUNT OFF
SELECT * FROM @AllTables ORDER BY DbName, SchemaName, TableName

有人可以帮助我如何在那里获得桌子的大小吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用PowerShell快速而肮脏:

$s = new-object microsoft.sqlserver.management.smo.server "your_server_here";

foreach ($db in $s.Databases) {
   foreach ($table in $db.Tables) {
      $table | select @{name="db";expression={$db.name}}, name, dataspaceused
   }
}

尺寸列于Kb。