2014-07-08 28 views
7

如何在Microsoft SQL Server的情況下檢索數據庫中沒有數據的所有表格(如表中沒有行)?
有什麼方法嗎?查找沒有數據的表格

+0

http://blog.sqlauthority.com/2010/09/08/sql-server-find-row-count-in-table-find-largest-table-in-database-part-2/ – sumit

回答

1

試試這個 -

WITH CTE AS 
(
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 
) 

SELECT * FROM CTE WHERE RowCnt = 0 
+1

http:// blog.sqlauthority.com/2010/09/08/sql-server-find-row-count-in-table-find-largest-table-in-database-part-2/ – sumit

0

正如AdaTheDev's answer說:

的聲明,我認爲是值得一提的是SET FMTONLY

SET FMTONLY ON; 
SELECT * FROM SomeTable 
SET FMTONLY OFF; 

沒有行被處理或發送當SET FMTONLY爲tu時,由於請求而向客戶端發送消息開啓。

這可以方便的原因是因爲您可以提供任何 查詢/存儲過程,並只返回結果集的元數據。

或者,如Shoaib's answer

嘗試說:SELECT TOP 0 * FROM [TableName]

和使用的SqlDataAdapter填充DataSet,然後從該數據集 拿到表。

Fiddle Demo

2

試試這個

SELECT TableName=OBJECT_NAME(OBJECT_ID) ,Data_Rows= SUM(row_count) 
    FROM  sys.dm_db_partition_stats 
    WHERE index_id in (0 ,1) 
    GROUP BY OBJECT_ID 
    HAVING SUM(row_count) = 0 

OR如果妳只需要用戶定義的表,然後使用這個

SELECT TableName=OBJECT_NAME(s.OBJECT_ID) ,Data_Rows= SUM(row_count) 
    FROM  sys.dm_db_partition_stats s 
    JOIN  sys.tables T 
    ON  T.object_id = S.object_id  
    WHERE index_id in (0 ,1) 
    and  T.type = 'U' 
    GROUP BY s.OBJECT_ID 
    HAVING SUM(row_count) = 0 
+0

系統數據庫也顯示... – Jesuraja

+0

問題從未排除系統表。 – Azar

0

要獲得空表的列表,我們可以使用下面的tsql -

EXEC sp_MSforeachtable 'IF NOT EXISTS (SELECT 1 FROM ?) PRINT ''?'' ' 

而且,爲了獲得其數據的至少一個排一個表的列表,我們可以使用下面的TSQL -

EXEC sp_MSforeachtable 'IF EXISTS (SELECT 1 FROM ?) PRINT ''?'' ' 
0
SELECT '[' + SCHEMA_NAME(t.schema_id) + '].[' + t.name + ']' AS fulltable_name, SCHEMA_NAME(t.schema_id) AS schema_name, t.name AS table_name, 
i.rows 
FROM sys.tables AS t INNER JOIN 
sys.sysindexes AS i ON t.object_id = i.id AND i.indid < 2 and i.rows=0 

這將是表中給出表名和行