Abbiamo visto nell’articolo precedente come migliorare drasticamente le prestazioni della query che restituisce il numero di righe contenute in una tabella. A questo punto possiamo fare un passo ulteriore e generare una lista delle tabelle ordinate per numero di record contenuti (in un prossimo articolo vedremo come ottenerla ordinata per spazio effettivamente occupato).
Non si tratta di fare altro che sfruttare la vista sys.partitions
appena vista (scusate il gioco di parole) e – tramite la stored procedure sp_MSforeachtable
– creare una tabella temporanea che riporti il nome di ogni tabella ed il relativo numero di record contenuti.
/* Come prima cosa correggiamo questa riga indicando il database corretto */ USE ; GO CREATE TABLE #rowcount ( TableName varchar(128) , RowsCount int ); EXEC sp_MSforeachtable 'INSERT INTO #rowcount SELECT ''?'', Sum ( partitions.rows ) FROM sys.partitions WHERE partitions.object_id = Object_Id ( ''?'' ) AND partitions.index_id < 2'; SELECT * FROM #rowcount ORDER BY RowsCount DESC; /* Un po' di paranoia... */ IF NOT Object_Id( 'tempdb..#rowcount' ) IS NULL DROP TABLE #rowcount;