Como descobrir em que base de dados se encontra um objecto do qual sabemos o nome? (SQL Server)
Há tempos criei um objecto a partir de um script T-SQL no SQL Server Management Console, numa janela de 'New Query'. Na altura não reparei que essa janela não estava a apontar para a base de dados pretendida, e agora, semanas depois, não conseguia descobrir a que base de dados daquela instância teria ido parar.
A resolução foi simples, utilizando uma stored procedure interna não documenta do SQL Server, a sp_MSforeachdb, corri o seguinte comando...
Exec sp_MSforeachdb 'Select * From ?..sysobjects where name = ''nome do meu objecto'' '
...e depois foi só procurar no meio dos resultados! Encontrado um resultado, o output não exibia o nome da base de dados onde se encontrava... uma pequena alteração, et voila!
Exec sp_MSforeachdb 'Select ''?'', * From ?..sysobjects where name = ''nome do meu objecto'' '
Também se pode utilizar o operador LIKE caso se saiba apenas uma parte do nome a procurar, podendo filtrar adicionalmente por campos da sysobjects para por ex. restringir os resultados a um tipo de objectos.