SQL Server 2008 - 查找包含大多数行的表

mr_*_*ski 17 sql t-sql sql-server sql-server-2008

SQL Server 2008中有没有办法找到数据库中行数最多的表?

Chr*_*nce 37

这会让你接近:

SELECT 
    [TableName] = so.name, 
    [RowCount] = MAX(si.rows) 
FROM 
    sysobjects so, 
    sysindexes si 
WHERE 
    so.xtype = 'U' 
    AND 
    si.id = OBJECT_ID(so.name) 
GROUP BY 
    so.name 
ORDER BY 
    2 DESC
Run Code Online (Sandbox Code Playgroud)

  • 请注意,sysindexes是一个兼容性视图,在将来的某些版本中可能不可用。同样,实际的行数可能与sysindexes.rows不匹配,因为sysindexes.rows不会针对表的每次修改进行更新。如果需要精确的行数,则必须使用COUNT(*)并访问实际表。最后,在SQL Server 2008中,存在筛选索引,因此索引中的行数可能小于其索引的表中的行数。由于您正在寻找MAX,这不是问题,但这意味着这可能不会以明显的方式推广。 (2认同)

Ken*_*itt 9

这里基本上与Chris Ballance提供的T-SQL相同,但使用新的对象目录视图而不是兼容性视图:

SELECT  SchemaName = schemas.[name],
        TableName = tables.[name],
        IndexName = indexes.[name],
        IndexType =
            CASE indexes.type
                WHEN 0 THEN 'Heap'
                WHEN 1 THEN 'Clustered'
            END,
        IndexPartitionCount = partition_info.PartitionCount,
        IndexTotalRows = partition_info.TotalRows
FROM    sys.tables
        JOIN sys.indexes
            ON  tables.object_id = indexes.object_id
                AND indexes.type IN ( 0, 1 )
        JOIN (  SELECT object_id, index_id, PartitionCount = COUNT(*), TotalRows = SUM(rows)
                FROM sys.partitions
                GROUP BY object_id, index_id
        ) partition_info
            ON  indexes.object_id = partition_info.object_id
                AND indexes.index_id = partition_info.index_id
        JOIN sys.schemas ON tables.schema_id = schemas.schema_id
ORDER BY SchemaName, TableName;
Run Code Online (Sandbox Code Playgroud)