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