Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como encontrar tabelas que contêm uma coluna específica no SQL Server


Embora extremamente poderoso como um banco de dados relacional, o SQL Server pode ser um pouco assustador às vezes quando se trata de procurar informações subjacentes sobre o próprio sistema de banco de dados.

Para aliviar essas dores de cabeça em uma pequena parte, exploraremos brevemente como encontrar todas as tabelas no banco de dados que contêm um nome de coluna específico .

Exibições de catálogo do SQL Server


Um conceito básico para entender sobre o SQL Server é o de catalog views , que são efetivamente tabelas de banco de dados (catalogs neste caso) que exibem informações de todo o sistema sobre o Mecanismo de Banco de Dados do SQL Server.

Consultando informações do sistema


Todas as catalog views são acessados ​​por meio de um SELECT Instrução SQL FROM um catálogo específico dentro do sys. namespace.

Por exemplo, a instrução a seguir pode ser usada para visualizar informações sobre todas as tabelas de banco de dados no sistema por meio do sys.tables Catálogo:
SELECT
  *
FROM
  sys.tables

Instrução LIKE e caractere curinga


Antes de entrarmos em como extrair todas as tabelas com um nome específico, devemos explorar brevemente o que o LIKE instrução faz, assim como o curinga (% ) e como eles são usados ​​juntos.

LIKE é usado em uma consulta para determinar se um determinado padrão de caracteres (normalmente os valores de uma column especificada ) correspondem a uma cadeia de caracteres formatada.

LIKE muitas vezes também é usado em conjunto com o % caractere, que representa um curinga ao tentar corresponder ao padrão. Quando um % caractere curinga está presente na string padrão, isso indica que qualquer caracteres podem estar presentes nesse local da string padrão e ainda ser considerados uma correspondência.

Por exemplo, se quisermos encontrar todos os livros onde o title começa com "The", mas pode conter quaisquer caracteres depois disso, usaríamos uma declaração como esta:
SELECT
  title,
  primary_author,
  published_date
FROM
  books
WHERE
  title LIKE 'The%'

Leitores atentos podem perceber que o padrão acima não corresponderia apenas a títulos que tivessem “O” no início, mas também a quaisquer títulos com palavras simplesmente começando com as três letras “O” também. Desde % curingas correspondem a qualquer caractere, se quisermos apenas verificar títulos com a palavra “The”, adicionar um espaço é mais apropriado:
SELECT
  title,
  primary_author,
  published_date
FROM
  books
WHERE
  title LIKE 'The %'

Selecionando tabelas contendo um nome de coluna


Com nosso conhecimento básico de ambas as catalog views e o LIKE instrução, agora estamos equipados para pesquisar todas as tabelas em nosso sistema que contêm um nome de coluna específico:
SELECT
  sys.columns.name AS ColumnName,
  tables.name AS TableName
FROM
  sys.columns
JOIN sys.tables ON
  sys.columns.object_id = tables.object_id
WHERE
  sys.columns.name = 'ColumnName'

Precisamos combinar informações de dois catálogos, sys.tables e sys.columns , então estamos usando um JOIN demonstração. Os dois estão associados pelo object_id campo, então JOIN naquele campo.

A partir daí, basta selecionar o ColumnName e TableName dos nossos resultados e, finalmente, é claro, apenas procurando registros onde sys.columns.name é igual ao nosso ColumnName fragmento.

No entanto, esta consulta encontrará apenas correspondências exatas do nome da coluna. Se quisermos encontrar correspondências parciais, podemos usar LIKE e % caracteres curinga em vez disso:
SELECT
  sys.columns.name AS ColumnName,
  tables.name AS TableName
FROM
  sys.columns
JOIN sys.tables ON
  sys.columns.object_id = tables.object_id
WHERE
  sys.columns.name LIKE '%ColumnName%'

Aí temos! Uma consulta simples para pesquisar todas as tabelas e colunas associadas com um nome de coluna específico (ou semelhante).