開發與維護時常需快速掌握各表資料量。以下提供兩種高效方法:游標動態統計與系統目錄查詢(推薦)。
USE 您的資料庫名稱
GO
SET NOCOUNT ON
DECLARE @tablename SYSNAME
DECLARE tables_cursor CURSOR FOR
SELECT name FROM sysobjects WHERE type = 'U' -- 僅使用者表
OPEN tables_cursor
FETCH NEXT FROM tables_cursor INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ('SELECT ''' + @tablename + ''' AS TableName, COUNT(*) AS RowCount FROM ' + QUOTENAME(@tablename))
FETCH NEXT FROM tables_cursor INTO @tablename
END
CLOSE tables_cursor
DEALLOCATE tables_cursor
SET NOCOUNT OFF
特點: 即時準確,但大表逐一 COUNT(*) 可能較慢。
SELECT
OBJECT_NAME(i.id) AS TableName,
i.rowcnt AS RowCount
FROM sysindexes i
JOIN sysobjects o ON i.id = o.id
WHERE o.type = 'U' -- 使用者表
AND i.indid IN (0, 1) -- 0=堆疊, 1=叢集索引
ORDER BY TableName;
優勢: 瞬間完成,無掃描表開銷。注意: rowcnt 為統計資訊估算值,非即時精確值。執行 DBCC UPDATEUSAGE(0) 或更新統計資訊可提高準確度。
SELECT
OBJECT_NAME(p.object_id) AS TableName,
SUM(p.rows) AS RowCount
FROM sys.partitions p
JOIN sys.objects o ON p.object_id = o.object_id
WHERE o.type = 'U'
AND p.index_id IN (0, 1)
GROUP BY p.object_id
ORDER BY TableName;
sys.partitions.rows 維護較即時,精確度高於 sysindexes.rowcnt。
sp_spaceused 或 sys.dm_db_partition_stats 同時取得空間佔用資訊。依據需求選擇適當方法,平衡精確度與效能。