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
risposta
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
http: // blog.sqlauthority.com/2010/09/08/sql-server-find-row-count-in-table-find-largest-table-in-database-part-2/ – sumit
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.
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
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 ''?'' '
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
http://blog.sqlauthority.com/2010/09/08/sql-server-find-row-count-in-table-find-largest-table-in-database-part-2/ – sumit