Executando um comando em todos os databases da instância no SQL Server

Visualizações: 2.152
Tempo de Leitura: 3 minutos

Fala pessoal!
Tudo tranquilo, né ?

Hoje vou mostrar a vocês como executar uma query em todos os databases de uma instância SQL Server. Muitas vezes isso é útil para criação de rotinas de monitoramento de espaço, rodar um checkdb em todos os bancos e muitas outras necessidades do dia-a-dia.

Para realizar essa atividade existem várias formas diferentes de programar, mas vou abordar duas das mais utilizadas

sp_MSforeachdb
A procedure sp_MSforeachdb já vem por padrão no SQL Server, mas não possui documentação oficial pela Microsoft até o momento e por isso, muita gente não sabe da sua existência ou como utilizá-la. Um dos detalhes mais importantes em sua utilização, é o wildcart ?, que irá receber o nome do database que está sendo iterado pela Stored Procedure sp_MSforeachdb.

Vamos a um exemplo bem básico que vai apenas exibir o nome de cada database:

Exibindo os datafiles de cada database

Exibindo os datafiles de cada database que contenha a palavra “Cobranca”

Exibindo o nome dos databases, schemas e tabelas que começam com Cliente na sua instância

Utilizando views de catálogo do SQL Server
A procedure de sistema sp_MSforeachdb é muito útil no dia-a-dia do DBA e bem fácil de ser utilizada, mas já vi alguns casos onde o banco ignoraalguns databases durante a iteração quando há uma sobrecarga muito grande no servidor. Por isso, vou mostrar uma outra abordagem para atender essa necessidade.

Exemplo 1:

Exemplo 2:
Após criar a SP abaixo, retorna o nome de todos os databases e os grava numa tabela temporária

Retorna o nome de todos os databases que contenham “Cobranca” no nome

Retorna o nome de todos os databases que NÃO contenham “Cobranca” no nome

Código da Stored Procedure stpExecuta_Query_Databases: