Come utilizzare SP_MSFEREACHDB in SQL Server

Come utilizzare SP_MSFEREACHDB in SQL Server
Quando si lavora con i database, incontrerai istanze in cui è necessario eseguire un set specifico di query su tutti i database. C'è una comoda procedura chiamata sp_msForeachdb () in tale scenario. Questa procedura consente di eseguire un set di comandi su ogni database disponibile nell'istanza SQL Server.

Usando questa guida, imparerai come utilizzare la procedura memorizzata SP_MSForeachdb (), come usarla e vari esempi di come utilizzare la procedura.

Sys.sp_msforachdb ()

SP_MSFEREACHDB () è una procedura memorizzata non documentata disponibile nel database principale. Ti consente di eseguire il ciclo su tutti i database nell'istanza SQL Server ed eseguire query SQL rispetto ai database specificati.

In SQL Server Management Studio, è possibile visualizzare questa procedura navigando nel database master -> Programmabilità -> Procedure memorizzate -> Procedure memorizzate di sistema.

Possiamo esprimere la sintassi della procedura come mostrato:

Dichiarare @Command Varchar (255)
Set @Command = 'Operazioni di comando'
EXEC SP_MSFEREACKDB @comando = comando

Vediamo ora alcuni esempi di utilizzo della procedura.

Esempio 1-SHOW I nomi di tutti i database

Supponiamo di voler ottenere i nomi di tutti i database nell'istanza del server SQL; È possibile utilizzare la procedura msfofoachdb () come mostrato nell'esempio seguente:

Dichiarare @Command Varchar (255)
Set @comando = 'usa ? Stampa db_name () '
EXEC SP_MSFEREACHB @Command

Il set di query sopra dovrebbe restituire i nomi di tutti i database in istanza. Un output di esempio è come mostrato:

maestro
tempdb
modello
msdb
SalesDB
Baseballdata
WideworldImporters
Tempo di completamento: 2021-12-14T02: 43: 45.8852391-08: 00

Esempio 2: mostra le dimensioni del database

Sebbene ci siano vari modi in cui è possibile utilizzare per ottenere le dimensioni di un database in SQL Server, in questo esempio, useremo la procedura SP_Spaceused.

Considera l'esempio mostrato di seguito:

Dichiarare @Command Varchar (255)
SET @comando = 'usa [?]; EXEC SP_SPACEUSED '
EXEC SP_MSFEREACHB @Command

Utilizzando un singolo comando, possiamo visualizzare la dimensione di tutti i database come mostrato nell'output di esempio di seguito:

Esempio 3: mostra tutte le colonne nei database

Per visualizzare le colonne in ciascun database, è possibile eseguire una query come mostrato nello snippet di esempio di seguito:

Dichiarare @Command Varchar (255);
SET @comando = 'Seleziona nome da ?.sys.colonne '
EXEC SP_MSFEREACHB @Command

La query sopra dovrebbe restituire le colonne in ciascun database come mostrato:

Esempio 4 - Ridurre tutti i database

È possibile ridurre le dimensioni di tutti i database nel server utilizzando la procedura MSFEROACHDB come mostrato di seguito:

Dichiarare @Command Varchar (255);
SET @comando = 'dbcc shrinkdatabase (' '?'', 0) '
EXEC SP_MSFEREACHB @Command

La query di esempio sopra proverà a ridurre le dimensioni di tutti i database sul server. Se si dispone di una raccolta completa di database, evita di utilizzare questa query in quanto potrebbe richiedere molto tempo e bloccare altri processi dall'uso dei database.

L'output di esempio è come mostrato:

Chiusura

Chiusura
Questo tutorial mostra come utilizzare la procedura memorizzata SP_MSForeachdb () per eseguire query SQL su tutti i database nell'istanza SQL Server.

Grazie per aver letto e rimanete sintonizzati per altri tutorial di SQL Server.