我需要帮助创建 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)
你可以简单地使用这个:
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
sys.partitions 目录视图
sys.dm_db_partition_stats 动态管理视图 (DMV)
sp_MSforeachtable 系统存储过程
COALESCE() 函数