Como pesquisar por tabelas pelo nome da coluna
Bom dia pessoal, hoje vou passar uma dica muito simples e ao mesmo tempo útil em SQL.
Muitas vezes não conhecemos completamente as tabelas e suas colunas em um banco de dados, ou mesmo o banco de dados é muito grande para decorar tudo, e precisamos fazer o relacionamento entre tabelas em uma instrução “select” mas não sabemos quais tabelas possuem as colunas de que precisamos, mas como encontrar estas tabelas?
Muito simples, basta usar o código abaixo:
select c.name AS 'NomeColuna' ,t.name AS 'NomeTabela' from sys.columns c join sys.tables t on (c.object_id = t.object_id) where c.name like '%COLUNA%' order by NomeColuna ,NomeTabela;
Onde substituiremos o valor “COLUNA” pelo nome/texto da coluna que queremos procurar e o select retornará todas colunas que possuem o texto “COLUNA” e o respectivo nome das tabelas as quais pertencem.
Notem que usei “%COLUNA%”, com dois curingas para encontrar campos que tenham o texto “COLUNA” em qualquer posição do nome.
Se quisermos que a consulta retorne coluna que iniciem com o texto “COLUNA”, utilizaremos o curinga “%” no final da instrução, dessa forma: “COLUNA%”, e o inverso se aplica para encontrar campos que possuam o termo procurado no final, dessa forma “%COLUNA”.
Podemos ampliar nossa consulta cruzando resultados, por exemplo, quando queremos encontrar a “COLUNA1” e a “COLUNA2” na mesma tabela, podemos usar o código abaixo:
select c.name AS 'NomeColuna' ,t.name AS 'NomeTabela' from sys.columns c join sys.tables t on (c.object_id = t.object_id) where c.name like '%COLUNA1%' and t.name in (select t.name AS 'NomeTabela' from sys.columns c join sys.tables t on (c.object_id = t.object_id) where c.name like '%COLUNA2%') order by NomeColuna ,NomeTabela
Dessa forma fazemos uma subconsulta dentro de outra, nesse caso fazemos o select da “COLUNA1” baseado no resultado do subselect da consulta da “COLUNA2”, ou seja, depois de já saber todas as tabelas que possuem a “COLUNA2”, usamos estas tabelas para consultar se elas possuem a “COLUNA1” também.
Esse aninhamento de selects pode ser feito quantas vezes quisermos para aumentar mais ainda a precisão da consulta.
Espero que tenha sido útil.
Dúvidas, postem nos comentários aqui abaixo.
Abraço