2014-07-08 19 views
7

Come possiamo recuperare tutte le tabelle nel database senza dati (come in, non ci sono righe nella tabella) nel caso di un Microsoft SQL Server?
C'è qualche metodo?Trova tabelle senza dati

+0

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

risposta

1

Prova questo -

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

Come indicato nel AdaTheDev's answer:

Una dichiarazione che penso è degno di nota è SET FMTONLY:

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

Nessuna riga vengono elaborati o inviati al cliente a causa della richiesta quando SET FMTONLY è tu acceso ON.

Il motivo per cui questo può essere utile perché è possibile fornire qualsiasi stored procedure/ query e tornare solo i metadati del gruppo di risultati.

Oppure, come dichiarato nella Shoaib's answer

Prova: SELECT TOP 0 * FROM [TableName]

e utilizzare SqlDataAdapter per riempire un DataSet, quindi ottenere la tabella da quella DataSet.

Fiddle Demo

2

Prova questo

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 

O Se u bisogno solo le tabelle definite dall'utente quindi utilizzare questo

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

DB di sistema visualizzato anche ... – Jesuraja

+0

Domanda non ha mai escluso le tabelle di sistema. – Azar

0

Per ottenere l'elenco di tavoli vuoti, possiamo utilizzare il seguente tsql -

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

E, per ottenere un elenco di tabelle con almeno una riga di dati, siamo in grado di utilizzare il seguito 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 

Darà nome della tabella e le righe in quella tabelle