2013-07-19 23 views

回答

7

你可以嘗試使用sysindexesINFORMATION_SCHEMA.TABLES :)

SELECT 'Table Name'=convert(char(25),t.TABLE_NAME), 
     'Total Record Count'=max(i.rows) 
FROM sysindexes i, INFORMATION_SCHEMA.TABLES t 
WHERE t.TABLE_NAME = object_name(i.id) 
     and t.TABLE_TYPE = 'BASE TABLE' 
GROUP BY t.TABLE_SCHEMA, t.TABLE_NAME 
HAVING max(i.rows)<=0 
+0

我結束了使用thos代碼,因爲我不知道我在做什麼..我剛剛添加databasename.INFORM ... –

+0

我喜歡你如何包括少於0行的表格;) –

3

嘗試:

WITH TableRows AS 
(
    SELECT 
     SUM(row_count) AS [RowCount], 
     OBJECT_NAME(OBJECT_ID) AS TableName 
    FROM 
     sys.dm_db_partition_stats 
    WHERE 
     index_id = 0 OR index_id = 1 
    GROUP BY 
     OBJECT_ID 
) 

SELECT * 
FROM TableRows 
WHERE [RowCount] > 0 
+1

如何在一個數據庫中獲取非空表? –

+0

@PeterSun:請參閱[我的答案](http://stackoverflow.com/a/39484816/485561)。 – Mankarse

1

人們還可以使用 「對象資源管理器詳細信息(F7)」,定位到 「表」 - 文件夾並設置對象瀏覽器的詳細信息以顯示行數(右鍵單擊標題)

2

Morris Miao's solution使用已棄用的sys.sysindexes視圖;並且根據表名來執行到INFORMATION_SCHEMA.TABLES的加入,其不保證是唯一的;即使有數據庫。

Simon's solution不限於當前數據庫的範圍;但可以通過使用sys.tables來提煉:

SELECT r.table_name, r.row_count, r.[object_id] 
FROM sys.tables t 
INNER JOIN (
    SELECT OBJECT_NAME(s.[object_id]) table_name, SUM(s.row_count) row_count, s.[object_id] 
    FROM sys.dm_db_partition_stats s 
    WHERE s.index_id in (0,1) 
    GROUP BY s.[object_id] 
) r on t.[object_id] = r.[object_id] 
WHERE r.row_count > 0 
ORDER BY r.table_name; 
相關問題