查询所有表的行数

And*_*lon 5 sql-server ssms

我需要帮助创建 MSSQL 查询以将每个表名传递给下面的查询,该查询返回行数。

这就是我如何获得单个表的行数:

SELECT Total_Rows = SUM(st.row_count)
FROM sys.dm_db_partition_stats st
WHERE object_name(object_id) = 'TABLE_NAME' AND (index_id < 2)
Run Code Online (Sandbox Code Playgroud)

在所有表上循环此查询的方法是什么,返回每个表的名称和行数的输出?

示例输出:

TableName     RowCount
---------------------
FirstTable    109
SecondTable   2195
ThirdTable    0
Run Code Online (Sandbox Code Playgroud)

KAS*_*DBA 9

你可以简单地使用这个:

SELECT sc.name +'.'+ ta.name TableName
 ,SUM(pa.rows) RowCnt
 FROM sys.tables ta
 INNER JOIN sys.partitions pa
 ON pa.OBJECT_ID = ta.OBJECT_ID
 INNER JOIN sys.schemas sc
 ON ta.schema_id = sc.schema_id
 WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)
 GROUP BY sc.name,ta.name
 ORDER BY SUM(pa.rows) DESC
Run Code Online (Sandbox Code Playgroud)

其他各种方法包括:here

  1. sys.partitions 目录视图

  2. sys.dm_db_partition_stats 动态管理视图 (DMV)

  3. sp_MSforeachtable 系统存储过程

  4. COALESCE() 函数