Script that provides the row counts and table names

后端 未结 7 1860
旧巷少年郎
旧巷少年郎 2021-02-05 10:24

Maybe you easily said how to I provide table names and row counts?

Pseudo SQL:

for \"select tablename from system.Tables\" into :tablename
  execute \"se         


        
相关标签:
7条回答
  • 2021-02-05 10:40
    exec sp_MSForEachTable 'SELECT ''?'' as TableName, COUNT(*) as Rows FROM ?'
    
    0 讨论(0)
  • 2021-02-05 10:46

    Try this

    -- drop table #tmpspace
    create table #tmpspace (
            name sysname
            , rows int
            , reserved varchar(50)
            , data varchar(50)
            , index_size varchar(50)
            , unused varchar(50)
            )
    
    dbcc updateusage(0) with NO_INFOMSGS
    
    exec sp_msforeachtable 'insert #tmpspace exec sp_spaceused ''?'''
    
    select * from #tmpspace
    order by convert(int, substring(reserved, 1, charindex(' ', reserved))) desc, rows desc, name
    

    Works on sql2000 too.

    dbcc updateusage might take some time but results will be 100% actual. Skip it if you need speed over accuracy.

    0 讨论(0)
  • 2021-02-05 10:50
    -- Shows all user tables and row counts for the current database 
    -- Remove OBJECTPROPERTY function call to include system objects 
    SELECT o.NAME,
      i.rowcnt 
    FROM sysindexes AS i
      INNER JOIN sysobjects AS o ON i.id = o.id 
    WHERE i.indid < 2  AND OBJECTPROPERTY(o.id, 'IsMSShipped') = 0
    ORDER BY o.NAME
    
    0 讨论(0)
  • 2021-02-05 10:55

    If you're on SQL Server 2005 or newer (you unfortunately didn't specify which version of SQL Server you're using), this query should give you that information:

    SELECT 
        TableName = t.NAME,
        TableSchema = s.Name,
        RowCounts = p.rows
    FROM 
        sys.tables t
    INNER JOIN 
        sys.schemas s ON t.schema_id = s.schema_id
    INNER JOIN      
        sys.indexes i ON t.OBJECT_ID = i.object_id
    INNER JOIN 
        sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
    WHERE 
        t.is_ms_shipped = 0
    GROUP BY
        t.NAME, s.Name, p.Rows
    ORDER BY 
        s.Name, t.Name
    

    This produces an output something like (this is from AdventureWorks):

    TableName       TableSchema      RowCounts
    AWBuildVersion    dbo                  1
    DatabaseLog       dbo               1597
    ErrorLog          dbo                  0
    Department        HumanResources      16
    Employee          HumanResources     290
    JobCandidate      HumanResources      13
    Address           Person           19614
    AddressType       Person               6
    ... and so on......
    
    0 讨论(0)
  • 2021-02-05 10:58
    SELECT 
    t.NAME AS TableName, p.[Rows] FROM 
    sys.tables t INNER JOIN
    sys.partitions p ON t.object_id = p.OBJECT_ID GROUP BY 
    t.NAME, p.[Rows] ORDER BY    t.NAME
    
    0 讨论(0)
  • 2021-02-05 11:00

    I have adjusted the answer from marc_c with CTE and displaying it with choice of displaying just the schema you are after.

    Should work with SQL Serve 2005 and newer.

    WITH CountRowsInTables (Table_Name, Table_Schema, Row_Counts) AS
    (
    SELECT 
    TableName = t.Name,
    TableSchema = s.Name,
    RowCounts = p.Rows
        FROM 
            sys.tables t
        INNER JOIN 
            sys.schemas s ON t.schema_id = s.schema_id
        INNER JOIN      
            sys.indexes i ON t.OBJECT_ID = i.object_id
        INNER JOIN 
            sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
        WHERE 
            t.is_ms_shipped = 0
        GROUP BY
            s.Name, t.Name, p.Rows
    )
    
    SELECT Table_name, Table_Schema, Row_Counts
        FROM CountRowsInTables
        WHERE Table_Schema = 'Pick_Schema_to_display'; 
    
    0 讨论(0)
提交回复
热议问题