sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo encontrar tablas que contienen una columna específica en SQL Server

Si bien es extremadamente potente como base de datos relacional, SQL Server puede resultar un tanto desalentador a veces cuando se trata de buscar información subyacente sobre el propio sistema de base de datos.

Para aliviar estos dolores de cabeza en una pequeña parte, exploraremos brevemente cómo encontrar todas las tablas en la base de datos que contienen un nombre de columna particular .

Vistas de catálogo de SQL Server

Un concepto básico para entender sobre SQL Server es el de catalog views , que son efectivamente tablas de bases de datos (catalogs en este caso) que muestran información de todo el sistema sobre el motor de base de datos de SQL Server.

Consultar información del sistema

Todas las catalog views se accede a través de un SELECT Sentencia SQL FROM un catálogo específico dentro del sys. espacio de nombres.

Por ejemplo, la siguiente declaración se puede usar para ver información sobre todas las tablas de la base de datos en el sistema a través de sys.tables catálogo:

SELECT
  *
FROM
  sys.tables

Declaración LIKE y carácter comodín

Antes de entrar en cómo extraer todas las tablas con un nombre en particular, debemos explorar brevemente lo que LIKE declaración lo hace, así como el comodín (% ) y cómo se usan juntos.

LIKE se usa en una consulta para determinar si un patrón particular de caracteres (típicamente los valores de una column específica) ) coincide con una cadena de caracteres formateada.

LIKE a menudo también se usa junto con el % carácter, que representa un comodín al intentar hacer coincidir el patrón. Cuando un % carácter comodín está presente en la cadena de patrón, indica que cualquiera los caracteres pueden estar presentes en esa ubicación de la cadena de patrón y seguir considerándose una coincidencia.

Por ejemplo, si queremos encontrar todos los libros donde el title comienza con "The" pero puede contener cualquier carácter a partir de entonces, usaríamos una declaración como esta:

SELECT
  title,
  primary_author,
  published_date
FROM
  books
WHERE
  title LIKE 'The%'

Los lectores observadores podrían darse cuenta de que el patrón anterior no solo coincidiría con los títulos que tenían "The" al principio, sino también con cualquier título con palabras que simplemente comenzaran con las tres letras "The". Desde % los comodines coinciden con cualquier carácter, si solo queremos buscar títulos con la palabra "The", agregar un espacio es más apropiado:

SELECT
  title,
  primary_author,
  published_date
FROM
  books
WHERE
  title LIKE 'The %'

Seleccionar tablas que contienen un nombre de columna

Con nuestro conocimiento básico de ambas catalog views y el LIKE declaración, ahora estamos equipados para buscar todas las tablas en nuestro sistema que contienen un nombre de columna en particular:

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'

Necesitamos combinar información de dos catálogos, sys.tables y sys.columns , entonces estamos usando JOIN declaración. Los dos están asociados por el object_id campo, por lo que JOIN en ese campo.

A partir de ahí, es una simple cuestión de seleccionar ColumnName y TableName de nuestros resultados, y finalmente, por supuesto, solo buscando registros donde sys.columns.name es igual a nuestro ColumnName cadena.

Sin embargo, esta consulta solo encontrará coincidencias exactas del nombre de la columna. Si queremos encontrar coincidencias parciales, podemos usar LIKE y % caracteres comodín en su lugar:

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%'

¡Ahí lo tenemos! Una consulta simple para buscar todas las tablas y columnas asociadas con un nombre de columna particular (o similar).