Eu tenho 100 bancos de dados de clientes que têm o mesmo esquema, mas conteúdo diferente.
Agora eu queria fazer uma análise e começar com a execução de uma coluna distinta em todos os bancos de dados. Minha instância contém isso e muito mais.
acho que é perto
EXEC sp_MSforeachdb 'Use ? select distinct [ColumName] from [TableName]'
No entanto, isso não os combina; cercar isso com um select
também não funciona.
Houve alguns problemas com uma versão anterior de outra resposta, então vou colocar isso aqui, como uma versão ligeiramente diferente da mesma coisa:
A agregação de strings via variável deve ser evitada, você deve usar
STRING_AGG
ouFOR XML
em vez dissoVocê deve usar
QUOTENAME
para citar nomes de banco de dados, caso haja caracteres que precisem de aspas.Por exemplo, considere o que acontece se houver um banco de dados chamado
My]Database
, ouMy]..SomeTable;DROP DATABASE OtherDatabase; --
.Solução:
O que você está procurando é o
UNION
operador , embora eu não ache que você possa usar isso com osp_MSforeachdb
procedimento. OUNION
operador remove automaticamente duplicatas para você.A solução mais fácil pode ser pré-criar um
#TempTable
e aproveitar isso em sua chamada parasp_MSforeachdb
assim:Este é o código que acabei usando: