SQL Server Snippets – Buscar columna en base de datos

Saludos a todos. Aprovechando un poco mi hora de almuerzo (para escribir el post, aunque lo publiqué en la noche, jejeje), quería compartirles este pequeño snippet, que consiste en una consulta para obtener el listado de tablas en las que exista una determinada columna, y es básicamente el siguiente:

SELECT
  SCHEMA_NAME(schema_id) AS esquema,
  t.name AS tabla,
  c.name AS columna
FROM sys.tables AS t
  INNER JOIN sys.columns c ON t.object_id = c.object_id
WHERE c.name = 'nombre_columna'
ORDER BY esquema, tabla

Dónde nombre_columna es el nombre de la columna que se desea buscar.

El snippet puede modificarse para buscar también las columnas en cuyo nombre se incluya cierta palabra, cambiando el igual (=) de la condición por un LIKE, así:

SELECT
  SCHEMA_NAME(schema_id) AS esquema,
  t.name AS tabla,
  c.name AS columna
FROM sys.tables AS t
  INNER JOIN sys.columns c ON t.object_id = c.object_id
WHERE c.name LIKE '%palabra%'
ORDER BY esquema, tabla

En este caso, el nombre de las tablas podría repetirse, en casos en los que más de una columna de la tabla posea la palabra buscada.

A modo de ejemplo, al ejecutar el siguiente script en la base de datos AdventureWorks:

 SELECT
 SCHEMA_NAME(schema_id) AS esquema,
 t.name AS tabla,
 c.name AS columna
 FROM sys.tables AS t
 INNER JOIN sys.columns c ON t.object_id = c.object_id
 WHERE c.name = 'productID'
 ORDER BY esquema, tabla
 

La consulta nos devuelve los siguientes resultados:

Resultados de consulta en AdventureWorks

Esta consulta me ha sido de gran ayuda en casos en los que la base de datos “relacional” no posee todas las debidas relaciones entre las tablas, ya que me permite encontrar las tablas en las que aparece cierta columna, para tratar de descubrir las posibles relaciones faltantes.

La consulta ha sido probada en SQL Server 2005 hasta SQL Server 2012, y funciona sin problemas.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s