Eu tenho algum SQL padrão que eu corro 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-se manualmente a um de cada vez e executar)
sql-server
Andrew Bickerton
fonte
fonte
Respostas:
sp_MSForEachDB
Uma opção é sp_MSForEachDB . Não é documentado, mas é útil, no entanto
Uma pesquisa nas interwebs também tem muitos outros exemplos
Nota: Sendo uma função não suportada (que possui alguns erros conhecidos), você pode querer escrever sua própria versão (obrigado @Pradeep)
O exemplo SQL acima precisaria ser reestruturado como:
NOTAS:
fonte
, ''?'' AS DBName
a qualquer instrução de seleção. Conforme meu exemploApenas meu $ 0,05: SQL Multi Script (execução de vários scripts em vários servidores SQL).
fonte
O SSMS Tools Pack faz isso muito bem e é gratuito para servidores de banco de dados antes de 2012. O recurso: "Executar em vários destinos" - http://www.ssmstoolspack.com/Features?f=6
fonte
Existe outro método que fornecerá 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 depois registre seu servidor uma vez para cada banco de dados, definindo, em cada caso, o banco de dados padrão como o desejado.
Depois de concluído, clique com o botão direito do mouse no seu grupo e selecione Nova Consulta. A janela de consulta que se abre terá "múltiplo", onde você normalmente veria um nome de servidor na barra de status. Qualquer consulta executada nesta janela funcionará 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 vontades somente operará nesse fragmento.
Funcionalidade muito poderosa, mas esquecida, para quando você rotineiramente precisa executar o mesmo SQL em vários servidores.
fonte
Minha empresa desenvolveu uma ferramenta chamada xSQL Script Executor . É gratuito para uso pessoal e, para mim, facilitou a implantação de scripts em vários destinos.
fonte
Eu desenvolvi esta ferramenta: https://github.com/andreujuanc/TakoDeploy
Ainda estou escrevendo algumas linhas, mas já está bem estável. Eu o usei em bancos de dados de produção e funciona como um encanto.
fonte