首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

快速取得資料庫中每個資料表的資料筆數

     編輯:關於SqlServer

開發與維護時常需快速掌握各表資料量。以下提供兩種高效方法:游標動態統計與系統目錄查詢(推薦)。

方法一:游標動態執行 COUNT(*) (SQL Server 7.0/2000 相容)

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(*) 可能較慢。

方法二:查詢系統目錄快速取得估算值 (SQL Server 2000/2005+ 推薦)

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) 或更新統計資訊可提高準確度。

方法三:SQL Server 2005+ 使用 DMV 取得精確值

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 同時取得空間佔用資訊。

依據需求選擇適當方法,平衡精確度與效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved