«

»

jun 28

Procedure não documentada sp_MSforeachdb

Muito útil em servidores com muitas bases, vamos aprender uma procedure não documentada pela Microsoft chamada sp_MSforeachdb. Como o próprio nome sugere, é utilizada para executar determinada query para cada base atachada na instância.

Para entendermos melhor, vamos ver na prática como funciona. No exemplo abaixo, observe que  em vermelho somente o que faz parte da sintaxe da sp_MSforeachdb, em azul chamamos cada base, em verde está a query que será executada para cada base atachada, ,e por último em roxo, a aspas fechando:

 

EXECUTE master.sys.sp_MSforeachdb ‘USE [?];
EXEC sp_spaceused

 

Ou simplesmente:

 

EXEC sp_MSforeachdb ‘USE [?];
EXEC sp_spaceused

 

Repare que (1)chamamos a procedure – EXEC sp_MSforeachedb -, (2)abrimos uma aspas simples e fomos para a primeira base da lista – ‘USE [?]; – e (3)já podemos rodar a query ou a procedure que desejamos para a base, lembrando de (4)fechar a aspas simples.

Resumindo:

 

EXEC sp_MSforeachdb ‘USE[?]; procedure ou query 

 

 

Vamos fazer outro exemplo utilizando a legenda de cores:

 

EXEC sp_MSforeachdb ‘USE[?]; EXEC sp_helpfile

 

Você pode também executar mais de um comando, ex:

 

exec sp_msforeachdb @command1 = ‘USE[?]; EXEC sp_helpfile’,

                        @command2 = ‘USE [?]; EXEC sp_spaceused’,

                         @command3 = ‘USE [?]; SELECT * from sys.databases’

 

Um último exemplo bem legal. Vamos alterar todas as bases para RESTRICTED USER (exceto master e tempdb):

 

EXEC sp_msforeachdb ‘ALTER DATABASE[?] SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE

 

 

Como as bases master e tempdb não podem ser setadas em RESTRICTED_USER, o SQL diz que dá erro mas todas as outras bases são alteradas.

Esta procedure não é documentada pela Microsoft, portanto, não há suporte ou material oficial da Microsoft que ensine a utilizá-la. Em compensação, não cai na prova de certificação 🙂

 

 .

Deixe uma resposta