Consultar definición de las tablas de una Base de datos

Consultar definición de las tablas de una Base de datos

Si alguna vez habéis realizado la documentación de un proyecto sabréis el tiempo que puede llegar a consumir documentar cada una de las tablas. Una manera de reducirlo podrá ser mediante el uso de las consultas contenidas en este artículo, ya que con ellas podremos obtener, de manera rápida, completa y eficaz, información agrupada sobre nuestras bases de datos.

El resultado de cada consulta dependerá de la base de datos a la que realice la solicitud dentro de una instancia de SQL Para este artículo, utilizaremos la conocida base de datos pública Northwind, por lo que los resultados se referirán a ella. Antes de realizar la correspondiente consulta, tendremos que seleccionar la base de datos en el selector de base de datos disponibles, o bien escribir antes de la consulta: «USE Northwind», pudiendo cambiar «Northwind» por el nombre de vuestra base de datos.

Las consultas que a continuación detallaremos nos ofrecerán la siguiente información:

  1. Listado de las tablas de la base de datos
  2. Definiciones de columnas de todas las tablas
  3. Toda la información de todas las columnas
  4. Nombre de tablas e información sobre filas y espacio ocupado

Listado de las tablas de la base de datos

La primera consulta nos proporcionará un listado completo de las tablas de la base de datos.

El resultado nos dará el nombre de la BBDD («northwind»), el nombre del esquema que contiene la tabla («dbo»), el nombre de la tabla (TABLE_NAME) y el tipo de tabla (TABLE_TYPE).

SELECT * FROM Information_schema.tables
 

Si quisiéramos tener un listado únicamente de las tablas o de las vistas añadiríamos la cláusula WHERE correspondiente:

WHERE TABLE_TYPE = 'BASE TABLE'o
WHERE TABLE_TYPE = 'VIEW'

Definiciones de columnas de todas las tablas

Para obtener la definición de las columnas de todas las tablas, es decir, el esquema de la tabla, el nombre de la tabla, la posición ordinal, el nombre de la columna, el tipo de dato contenido y su longitud máxima; utilizaremos la siguiente consulta:

SELECT Table_schema, Table_Name, Ordinal_Position, Column_name, Data_Type,
Character_maximum_length as Max_length
FROM Information_schema.columns

Toda la información de todas las columnas

A diferencia de la consulta anterior, ésta devuelve no sólo la definición, sino toda la información disponible de todas las columnas.

SELECT * FROM INFORMATION_SCHEMA.columns

Nombre de tablas e información sobre filas y espacio ocupado

Ésta consulta nos facilitará los nombre e información relativa a las filas y el espacio ocupado. En concreto, nos devolverá los siguientes campos:

  • TableName: Nombre de cada tabla de la BBDD
  • IndexName: Clave primaria asignada
  • Rows: Número de filas
  • TotalPages: Número total de páginas asignadas o reservadas por esta unidad de asignación
  • UsedPages: Número total de páginas actualmente en uso
  • DataPages: Número de páginas usadas que tienen datos de fila, datos LOB y datos de desbordamiento de fila. Se omiten las páginas de índice internas y páginas de administración de asignación.
  • TotalSpaceMBUsedSpaceMB y DataSpaceMB: Espacio en MB ocupado por las anteriores páginas.
SELECT
    t.NAME AS TableName,
    i.name AS indexName,
    p.[Rows],
    sum(a.total_pages) AS TotalPages,
    sum(a.used_pages) AS UsedPages,
    sum(a.data_pages) AS DataPages,
    (sum(a.total_pages) * 8) / 1024 AS TotalSpaceMB,
    (sum(a.used_pages) * 8) / 1024 AS UsedSpaceMB,
    (sum(a.data_pages) * 8) / 1024 AS DataSpaceMB
FROM
    sys.tables t INNER JOIN     
    sys.indexes i ON t.OBJECT_ID = i.object_id INNER JOIN
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id INNER JOIN
    sys.allocation_units a ON p.partition_id = a.container_id
WHERE
    t.NAME NOT LIKE 'dt%' AND i.OBJECT_ID > 255 AND i.index_id <= 1
GROUP BY
    t.NAME, i.object_id, i.index_id, i.name, p.[Rows]
ORDER BY
    object_name(i.object_id)

Podéis obtener más información en los siguientes enlaces:

Sobre el autor

Xavier Plaza:

0 Comments

Quieres compartir tus impresiones?

Tu dirección de correo no será publicada. Los campos obligatorios se marcan con *

Deja una respuesta