【问题标题】:Query to get names of databases, count of tables, count of indexes, size of the database and owner of database查询以获取数据库名称、表数、索引数、数据库大小和数据库所有者
【发布时间】:2018-02-24 13:49:26
【问题描述】:

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

【问题讨论】:

  • 提示:INFORMATION_SCHEMA.tables.

标签: sql sql-server database indexing count


【解决方案1】:

数据库中的表

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

【讨论】:

    【解决方案2】:

    是的。您可以像这样从 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 
    

    【讨论】:

      【解决方案3】:

      我倾向于使用 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}};
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-14
        • 2011-12-15
        • 2020-09-10
        • 1970-01-01
        相关资源
        最近更新 更多