查询以获取数据库的名称,表的数量,索引的数量,数据库的大小和数据库的所有者

时间:2017-09-15 11:22:17

标签: sql sql-server database indexing count

在MSSQL上是否有查询来获取数据库的名称,表的数量,索引的数量,数据库的大小和数据库的所有者?我查看了许多解决方案,但找不到任何解决方案,我也可以在DB上获得索引计数。

3 个答案:

答案 0 :(得分:0)

数据库中的表

    sp_MSForEachTable 'DECLARE @t AS VARCHAR(MAX); 
    SELECT @t = CAST(COUNT(1) as VARCHAR(MAX)) 
    + CHAR(9) + CHAR(9) + ''?'' FROM ? ; PRINT @t'

答案 1 :(得分:0)

是。您可以像这样从SQL执行所有这些操作:

获取数据库名称:

select DB_NAME() 

获取表格数量:

select count(*) from sys.tables

获取索引数:

select count(*) from sys.indexes

获取使用的空间量:

exec sp_spaceused

获取数据库所有者的用户名:

select distinct suser_sname( owner_sid ) from sys.databases 

答案 2 :(得分:0)

我倾向于使用Powershell来做这样的事情。以下是我对它的看法:

push-location;
import-module sqlps -disablenamechecking;
pop-location;

$s = new-object microsoft.sqlserver.management.smo.server 'yourServer';

foreach ($db in $s.Databases | where {$_.IsAccessible -eq $true} ) {
    $r = @{TableCount = 0;
        IndexCount = 0;
        Name = $db.Name;
        Size = $db.Size
    }
    $table_count = 0;
    $index_count = 0;
    foreach ($table in $db.Tables) {
        $r.TableCount += 1;
        $r.IndexCount += $table.Indexes.Count
    }
    $r | select-object @{name='name';expression={$_.name}},
        @{name='size';expression={$_.size}},
        @{name='TableCount';expression={$_.TableCount}},
        @{name='IndexCount';expression={$_.IndexCount}};
}