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).