Giusto l’altro giorno un mio collega mi ha chiesto come fare ad avere un elenco di tutte le tabella di un Microsoft SQL Server con relativo conteggio dei record presenti per ognuna, in quel momento mi sono reso conto che effettivamente non e’ un’ operazione proprio immediata e tantomeno a portata di “click”, cosi ho deciso di inserire questo howto che descrive in modo generico il processo per ottenere il risultato richiesto.
Livello:
Facile
Per chi:
Principiante
Scenario:
Prelevare l’elenco della tabelle e relativo numero di record da un database Microsoft Sql
Se abbiamo la necessita’ di ricavare l’elenco delle tabelle presenti in un database per eseguire su ognuna una serie di query o se abbiamo bisogno di effettuare una serie di operazioni su tutti i database presenti su un Microsoft Sql Server ci possono venire in aiuto le due stored procedure, non documentate nei books on line, sp_MSforeachdb e sp_MSforeachtable.
Molto probabilmente se avete fatto l’operazione descritta in “scenario” senza utilizzare nessuna delle due SP avrete scritto una quantita’ di codice eccezzionale :)
Questa SP si trova nel database master, ma vediamo in pratica come utilizzare la sp_MSforeachtable per ottenere il risultato che vogliamo, questa e’ la sitassi per invocare tale procedura:
exec @RETURN_VALUE=sp_MSforeachtable @command1, @replacechar,
@command2, @command3, @whereand, @precommand, @postcommand
Un modo veloce ma poco pratico a livello di output per ottenere il conteggio dei record di ogni tabella e quello di eseguire la seguente istruzione:
EXEC sp_MSforeachtable 'SELECT COUNT(*) AS nRows, ''?'' as tableName from ?'
Un sistema piu’ efficente invece e’ quello di creare runtime una tabella dove andare ad inserire il nome di ogni tabella con il suo numero di record cosi da ottenere un output decisamente migliore
USE <dbdautilizzare> GO CREATE TABLE #rowcount (tableName VARCHAR(128), nRows INT) EXEC sp_MSforeachtable 'INSERT INTO #rowcount SELECT ''?'', count(*) from ?' SELECT * FROM #rowcount ORDER BY tableName DROP TABLE #rowcounter
Ma analizziamo nel dettaglio i vari parametri
- @RETURN_VALUE un intero restituito dalla SP
- @command1 – un nvarchar(2000) e’ il primo comando eseguito dalla SP
- @replacechar – e’ il carattere utilizzato per sostituire il nome della tabella (di default e’ il “?”)
- @command2 – un comando aggiuntivo che puo essere eseguito per ogni tabelle
- @command3 – un altro comando aggiuntivo che puo essere eseguito per ogni tabelle
- @whereand – nvarchar(2000) puo contenere una condizione che ci permette di identificare meglio un oggetto tabella
- @precommand – un nvarchar(2000) un comando che viene eseguito PRIMA di prcessare la singola tabella
- @postcommand – un nvarchar(2000) un comando che viene eseguito ALLA FINE DI TUTTO IL CICLO
Come al solito spero che il post possa essere stato d’aiuto a qualcuno.
Ciao,
Cristian.
RSS feed for comments on this post · TrackBack URI
Leave a reply
You must be logged in to post a comment.