[T-SQL] Ottenere Lista Tabelle con Numero Record (it-IT)
Finalità
Nel seguente articolo vedremo un rapido metodo per ottenere una lista delle tabelle presenti in una database appartenente ad una certa istanza di SQL Server, corredata dal numero di records presenti in ciascuna tabella. Lo script risulta utile per analizzare quali tabelle risultino maggiormente onerose rispetto ad altre.
Script
Lo script si articola in quattro passaggi: anzitutto, crea una tabella in memoria, di nome conteggio (#conteggio), avente come struttura un campo VARCHAR atto ad ospitare i nomi di tabella, ed un campo INT per esporne il numero di records.
Successivamente, sfruttando la Stored Procedure sp_MSForEachTable (funzione presente nel database master, sezione Programmabilità » Stored Procedure » Stored Procedure di sistema), esegue - per ogni tabella presenta in un determinato database - l'istruzione di cui alla variabile @command1, ovvero l'inserimento di un record avente, come primo campo, il nome della tabella stessa, mentre come secondo, il conteggio delle righe presenti, tramite istruzione COUNT(*).
CREATE TABLE #conteggio(table_name varchar(255), row_count int)
EXEC sp_MSForEachTable @command1='INSERT #conteggio (table_name, row_count) SELECT ''?'', COUNT(*) FROM ?'
SELECT REPLACE(REPLACE(table_name, '[dbo].[', ''), ']', ''), row_count FROM #conteggio ORDER BY row_count DESC
DROP TABLE #conteggio
La successiva SELECT recupera i records così scritti, ordinati per campo row_count decrescente (ovvero, dal record che mostra un valore più alto fino a quello dal valore più basso). Dal momento che il campo rappresentante il nome tabella viene letto nella forma [dbo].[Nome_Tabella], si applica qui - tramite funzione REPLACE - una pulizia del campo, per fare in modo di esporre il nome tabella privo di ulteriori indicatori.
Infine, una volta visualizzati i dati, si procede nella cancellazione della tabella temporanea in memoria.