post icon

Listar las columnas y sus características de una tabla en SQL Server

Leer la metadata de SQL Server no es para nada complejo, y tiene una buena documentación. Una tarea útil y que es bastante buscada en los foros es listar las columnas de las tablas, con sus tipos de datos, Foreing Keys, Primary Keys, etc.

No es muy común hacer estas lecturas, pero si sirve para un DBA, o un desarrollador que quiere automatizar procesos o incluso crearse alguna especie de IDE personalizado.

En el siguiente query verán listados los nombres, el id, tipo de dato, precision, si soporta nulo, si es identity, sus FK entre otros.

select C.object_id as 'Id',
	C.name as 'Columna', T.name as 'Tipo', C.max_length as 'Longitud',C.precision as 'Precision',
	C.scale as 'Escala', C.is_nullable as 'nullable',C.is_identity as 'Identity?',
	T2.name as 'Tabla Padre',C2.name as 'Columna Padre' 
from sys.columns as C
	inner join sys.types as T on T.user_type_id = C.user_type_id
	join sys.objects as O on O.object_id = C.object_id
	left join sys.foreign_key_columns as FKC on FKC.parent_object_id = C.object_id
		and FKC.parent_column_id = C.column_id
	left join sys.tables as T2 on T2.object_id = FKC.referenced_object_id
	left join sys.columns as C2 on C2.object_id = FKC.parent_object_id
		and C2.column_id = FKC.parent_column_id
where o.object_id = @idtabla -- aqui colocan el id que desean
order by C.column_id asc

Para ver las PK podriamos ponerlos en el mismo query, aunque decidi separarlos porque es mas complejo trabajar si esta compuesto por varias columnas.

SELECT i.name AS index_name
    ,ic.index_column_id
    ,key_ordinal
    ,c.name AS column_name
    ,TYPE_NAME(c.user_type_id)AS column_type
    ,is_identity
FROM sys.indexes AS i
INNER JOIN sys.index_columns AS ic
    ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN sys.columns AS c
    ON ic.object_id = c.object_id AND c.column_id = ic.column_id
WHERE i.is_primary_key = 1
    AND i.object_id = OBJECT_ID('<schema_name.table_name>'); -- colocan el nombre de la tabla o pueden elegir directamente el id
GO

Comentarios desde Facebook:

  1. avatar
    Edward Ocando VENEZUELA Google Chrome Windows
    26 junio 2014 at 11:26 #

    No funciona para campos que son auto calculados (IS_COMPUTED). (interesa saber también la formula *DEFINITION* para el calculo)

    Tampoco para saber el valor predeterminado de la columna (si lo tuviera) o para saber si la columna es de tipo ROWGUID o el esquema al que pertenece la tabla.

  2. avatar
    Aníbal Sánchez Numa CUBA Mozilla Firefox Windows
    4 mayo 2012 at 11:16 #

    Salu2, necesito leer metadatos pero específicamente las restricciones UNIQUE y CHECK tanto a nivel de columna como de tabla… espero puedan ayudarme

Responder