Listar las tablas y columnas de una Base deDatos

Hoy me encontré con una petición bastante inusual (inusual, porque nunca me lo habían pedido antes…). ¿Como obtengo una lista de TODAS las tablas y TODAS las columnas de una Base de Datos?

No fue menor la solicitud. Obtener el listado de todas las columnas de una tabla no es difícil, pero esta Base de Datos tenia cerca de 60 tablas y algunas de estas tablas tienen casi 20 columnas, la tarea se hacía un poco tediosa.

Hasta que se me ocurrió ponerme a cachurear por ahí y encontré las siguientes consultas:

Para Bases de Datos SQL Server 2000

SELECT SO.NAME, SC.NAME

FROM sysobjects SO INNER JOIN syscolumns SC

ON SO.ID = SC.ID

WHERE SO.XTYPE = ‘U’

ORDER BY SO.NAME, SC.NAME

Para Bases de Datos SQL Server 2005

SELECT SO.NAME, SC.NAME

FROM sys.objects SO INNER JOIN sys.columns SC

ON SO.OBJECT_ID = SC.OBJECT_ID

WHERE SO.TYPE = ‘U’

ORDER BY SO.NAME, SC.NAME

 

Como siempre, sus dudas y comentarios son bienvenidos.

15 comentarios en “Listar las tablas y columnas de una Base deDatos”

  1. Buen aporte Felipe, en SQL Server 2005 también puedes optar por utilizar la siguiente consulta para obtener las tablas de una base de datos

    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

    si quieres obtener todas las columnas

    SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS

    y si quieres todas las columnas y tablas relacionadas puedes utilizar

    SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS

    Un saludo.

  2. Aporto una consulta para SQL Server 2008 que muestra:

    – Tabla

    – Columna

    – Tipo de dato

    – Tamaño del dato

    SELECT

    so.name AS Tabla,

    sc.name AS Columna,

    st.name AS Tipo,

    sc.max_length AS Tamaño

    FROM

    sys.objects so INNER JOIN

    sys.columns sc ON

    so.object_id = sc.object_id INNER JOIN

    sys.types st ON

    st.system_type_id = sc.system_type_id AND

    st.name != ‘sysname’

    WHERE

    so.type = ‘U’

    ORDER BY

    so.name,

    sc.name

    Saludos

  3. Probé todas las consultas para SQL 7 y me quedo con este SP que encontré hace tiempo….

    Aqui les dejo el SP

    —————-SP———————————-

    if exists (select * from sysobjects where id = object_id(‘dbo.p_sizetables’) and sysstat & 0xf = 4)

    drop procedure dbo.p_sizetables

    GO

    create procedure dbo.p_sizetables

    as

    Begin transaction

    /**************Procedimiento creado por KM para ver el tamaño de las tablas de una base de datos*/

    SET NOCOUNT ON

    declare @nombre_tabla varchar(100)

    declare @propietario varchar(40)

    declare @uid int

    declare @nombre_completo varchar(150)

    declare @nombre_db varchar(256)

    create table #resultados

    (nombre varchar(50),

    filas decimal(12,0),

    reservado varchar(40),

    data varchar(40),

    tamaño_indice varchar(20),

    no_usado varchar(20))

    declare tablas cursor

    for select a.uid , propietario = left( b.name,40), tabla =  a.name from sysobjects a, sysusers b

    where type = ‘U’ and a.uid = b.uid  order by tabla

    select @nombre_db = db_name()

    OPEN tablas

    FETCH NEXT FROM tablas into @uid, @propietario, @nombre_tabla

    WHILE @@FETCH_STATUS = 0

    BEGIN

       if @uid = 1

       begin

             insert #resultados    

             exec sp_spaceused @nombre_tabla

       end

       else

           begin

            SET @nombre_completo = rtrim(ltrim(@nombre_db))+’.’ + ltrim(rtrim(@propietario)) +’.’+ @nombre_tabla

             insert #resultados    

             exec sp_spaceused @nombre_completo

          end

       FETCH NEXT FROM tablas INTO @uid, @propietario, @nombre_tabla

    END

    CLOSE tablas

    DEALLOCATE tablas

    select * from #resultados

    order by filas desc

    Commit Transaction

  4. Muy buen dato Felipe, también Arturo y Arayo.
    Ahora, una pequeña consulta de un neófito: Hay alguna herramienta que me permita “documentar” una base de datos de forma “automatizada”?

    Saludos

    Gonzalo

  5. @Francisco: Ya probé tu SP y funciona perfecto. Gracias!!!
    @GBR: Prueba con la consulta que aportó Arturo en Report Builder 2.0, si ademas necesitas el modelo de datos, puedes hacerlo con Visio (yo usé 2010 Beta) y ahi vas generando la documentación.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *