Sql server SQL Server Management Studio-查找所有非空表

Sql server SQL Server Management Studio-查找所有非空表,sql-server,tsql,ssms,Sql Server,Tsql,Ssms,SQL Server Management Studio Express是否有办法列出所有非空表?我有100多个表格要查看和检查数据。试试: WITH TableRows AS ( SELECT SUM(row_count) AS [RowCount], OBJECT_NAME(OBJECT_ID) AS TableName FROM sys.dm_db_partition_stats WHERE index_id = 0

SQL Server Management Studio Express是否有办法列出所有非空表?我有100多个表格要查看和检查数据。

试试:

WITH TableRows AS
(
   SELECT 
      SUM(row_count) AS [RowCount], 
      OBJECT_NAME(OBJECT_ID) AS TableName
   FROM 
      sys.dm_db_partition_stats
   WHERE 
      index_id = 0 OR index_id = 1
   GROUP BY 
      OBJECT_ID
)

SELECT *
FROM TableRows
WHERE [RowCount] > 0

您可以尝试使用
sysindex
INFORMATION\u SCHEMA.TABLES
:)

还可以使用“对象浏览器详细信息(F7)”,导航到感兴趣的数据库的“表”文件夹,并将对象浏览器详细信息设置为显示行数(右键单击标题)

使用不推荐使用的视图;并根据表名进行连接,表名不保证唯一;甚至在数据库中

未限定到当前数据库的范围;但可通过使用以下工具进行改进:


假设表可以有两种类型

  • 聚集表(具有聚集索引的表)
  • 堆表( 没有聚集索引的表)
  • SQL Server中的所有表都划分为分区。这样所有表都将至少有一个分区

    在中,所有表的每个分区都有一行

    sys.partitions
    中的这些行包含有关相应表分区中的行数的信息

    由于SQL Server中的所有表都包含最后一个分区,因此我们可以从
    sys.partitions
    中获取关于表中行数的信息

    SELECT
            OBJECT_NAME(T.OBJECT_ID) AS TABLE_NAME,
            SUM(P.ROWS)  AS TOTAL_ROWS
    FROM
            SYS.TABLES T
    INNER JOIN 
            SYS.PARTITIONS P 
            ON T.OBJECT_ID = P.OBJECT_ID
    WHERE 
            P.INDEX_ID IN (0,1)
    GROUP BY 
            T.OBJECT_ID
    HAVING 
            SUM(P.ROWS) > 0
    
    SELECT 
        sch.name as SchemaName,
        t.NAME AS TableName,
        p.rows AS RowCounts
    FROM 
        sys.tables t
    INNER JOIN 
        sys.partitions p ON t.object_id = p.OBJECT_ID 
    INNER JOIN sys.schemas sch
        on t.schema_id = sch.schema_id
    WHERE 
        t.NAME NOT LIKE 'dt%' 
        AND t.is_ms_shipped = 0
        AND p.rows = 0
    GROUP BY 
        sch.name,t.Name, p.Rows
    ORDER BY 
        sch.name,t.Name
    
    在计算不同分区中的行总数时,我们考虑的是
    索引id
    (0,1)

    • 堆的索引id=0
    • index\u id=1表示聚集索引
    • index\u id>1用于非聚集索引。
    一个表可以有一个聚集索引,也可以没有

    但非聚集索引并非如此。一个表可以有多个非聚集索引。 因此,我们不能在对行求和时使用这些
    索引id

    • 堆表将具有
      索引\u id=0
    • 群集表将具有
      索引\u id=1

    这是一个轻微的改进。它将显示表的模式,并使用
    sys.partitions
    比较
    rows=0

    SELECT
            OBJECT_NAME(T.OBJECT_ID) AS TABLE_NAME,
            SUM(P.ROWS)  AS TOTAL_ROWS
    FROM
            SYS.TABLES T
    INNER JOIN 
            SYS.PARTITIONS P 
            ON T.OBJECT_ID = P.OBJECT_ID
    WHERE 
            P.INDEX_ID IN (0,1)
    GROUP BY 
            T.OBJECT_ID
    HAVING 
            SUM(P.ROWS) > 0
    
    SELECT 
        sch.name as SchemaName,
        t.NAME AS TableName,
        p.rows AS RowCounts
    FROM 
        sys.tables t
    INNER JOIN 
        sys.partitions p ON t.object_id = p.OBJECT_ID 
    INNER JOIN sys.schemas sch
        on t.schema_id = sch.schema_id
    WHERE 
        t.NAME NOT LIKE 'dt%' 
        AND t.is_ms_shipped = 0
        AND p.rows = 0
    GROUP BY 
        sch.name,t.Name, p.Rows
    ORDER BY 
        sch.name,t.Name
    

    在单个数据库或多个数据库中?在一个数据库中获取非空表如何?@Peterson:看。我结束了使用这些代码,因为我不知道我在做什么。。我刚刚添加了databasename。通知…我喜欢包含少于0行的表的方式;)@乔什诺,我修好了。真不敢相信这样持续了这么长时间。除非用户是服务器管理员,否则这种方法不起作用。这将产生“在数据库“”中拒绝查看数据库状态权限”。这是唯一可以运行的查询,而无需用户是服务器管理员(或明确授予数据库的查看数据库状态权限)。