EXEC sp_MSforeachdb '
USE [?];
SELECT DISTINCT
DB_NAME() AS Database_Name,
o.name AS Object_Name,
o.type_desc
FROM sys.sql_modules m
INNER JOIN
sys.objects o
ON m.object_id = o.object_id
WHERE m.definition Like ''%nota%''';
O código executa uma consulta em todas as bases de dados disponíveis em um servidor SQL Server. Vou explicar o que cada parte do código faz:
EXEC sp_MSforeachdb - Isso inicia um procedimento armazenado estendido chamado sp_MSforeachdb. Esse procedimento armazenado é uma ferramenta do SQL Server que permite iterar por todas as bases de dados no servidor e executar um comando em cada uma delas.
'USE [?];' - Dentro do procedimento sp_MSforeachdb, ele começa por alternar para o contexto da base de dados atual. O ?[ é um marcador que será substituído pelo nome da base de dados atual durante a iteração. Isso significa que o código dentro das aspas simples será executado em cada base de dados encontrada.
A partir daqui, o código executa uma consulta na base de dados atual:
SELECT DISTINCT - Isso inicia a seleção de registros da tabela resultante. O DISTINCT garante que apenas registros únicos sejam retornados.
DB_NAME() AS Database_Name - Isso seleciona o nome da base de dados atual e o renomeia como Database_Name.
o.name AS Object_Name - Isso seleciona o nome do objeto da base de dados atual (provavelmente tabelas ou vistas) e o renomeia como Object_Name.
o.type_desc - Isso seleciona a descrição do tipo de objeto da base de dados atual (por exemplo, "TABELA", "VISTA", etc.).
FROM sys.sql_modules m INNER JOIN sys.objects o ON m.object_id = o.object_id - Isso faz um JOIN entre duas tabelas do sistema sys.sql_modules e sys.objects. O sys.sql_modules contém a definição (código fonte) dos objetos no banco de dados, enquanto o sys.objects contém informações sobre todos os objetos do banco de dados. O JOIN é feito com base no object_id, que é uma chave primária comum entre as duas tabelas.
WHERE m.definition LIKE '%nota%' - Isso filtra os resultados para incluir apenas os objetos cujas definições (código fonte) contenham a palavra "nota". O operador LIKE é usado com % para encontrar qualquer ocorrência da palavra "nota" em qualquer lugar da definição do objeto.
Portanto, o código em questão percorre todas as bases de dados no servidor SQL Server e seleciona informações sobre objetos cujas definições contenham a palavra "nota". O resultado será uma lista de objetos de banco de dados que atendem a esse critério em todas as bases de dados disponíveis.
Veja um exemplo feito com esse código em um ambiente de teste na figura abaixo.
Comments