Eu tenho algum SQL padrão que executo em vários bancos de dados em um único servidor para me ajudar a diagnosticar problemas:
select
so.name,
so.type,
MAX(case when sc.text like '%remote%' then '' ELSE 'N' END) AS Relevant,
@@ServerName as Server,
DB_Name() as DBName
from
sysobjects so with (nolock)
join syscomments sc with (nolock) on so.id = sc.id
where (sc.text like '%emote%')
group by so.name, so.type
order by so.type, so.name
Como posso executar isso em todos os bancos de dados em um único servidor? (além de conectar manualmente um de cada vez e executar)
sp_MSForEachDB
Uma opção é sp_MSForEachDB . Não está documentado, mas é útil, no entanto
Uma pesquisa nas interwebs tem muitos outros exemplos também
Nota: Sendo uma função não suportada (que tem alguns bugs conhecidos), você pode querer escrever sua própria versão (obrigado @Pradeep)
O exemplo SQL acima precisaria ser reestruturado como:
NOTAS:
Apenas meus $ 0,05: SQL Multi Script (execução de vários scripts em vários SQL Servers).
O SSMS Tools Pack faz isso muito bem e é gratuito para servidores de banco de dados anteriores a 2012. O recurso: "Executar em vários destinos" - http://www.ssmstoolspack.com/Features?f=6
Existe um outro método que dará saída em um único conjunto de resultados semi-mesclados. Primeiro abra Servidores Registrados e crie um novo grupo em Grupos de Servidores Locais e registre seu servidor uma vez para cada banco de dados, em cada caso definindo o banco de dados padrão para o desejado.
Depois de concluído, clique com o botão direito do mouse em seu grupo e selecione Nova consulta. A janela de consulta que se abre terá "múltiplos" onde você normalmente veria um nome de servidor na barra de status. Quaisquer consultas executadas nesta janela funcionarão em cada servidor registrado que estava no grupo. A primeira coluna dos resultados será o nome do servidor registrado. O conjunto de resultados será fragmentado por essa primeira coluna e a ordem por testamentos só funcionará dentro desse fragmento.
Funcionalidade muito poderosa, mas negligenciada, para quando você precisa executar rotineiramente o mesmo SQL em vários servidores.
Minha empresa desenvolveu uma ferramenta chamada xSQL Script Executor . É gratuito para uso pessoal e, para mim, facilitou muito a implantação de scripts em vários destinos.
Desenvolvi esta ferramenta: https://github.com/andreujuanc/TakoDeploy
Ainda estou escrevendo algumas linhas sobre ele, mas está bastante estável agora. Eu o usei contra bancos de dados de produção e funciona como um encanto.