Query Sql per ottenere le tabelle ordinate per numero di record contenuti

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;

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*