[Code] Cómo obtener las columnas de una tabla identificando su llave primaria

Se presenta el script para obtener todos los campos de una tabla y saber cual(es) de ellos son llave primaria

declare @tabla sysname 
set @tabla = 'mitabla' --El nombre de la tabla que se quiere evaluar

;With PrimaryKeys (object_id, column_id) as (
SELECT ic.object_id, ic.column_id AS ColumnName 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 and ic.OBJECT_ID = OBJECT_ID(@tabla,N'U')
)
select name, case when PrimaryKeys.object_id is null then 0 else 1 end IsKey from sys.columns AS C
left join PrimaryKeys ON c.object_id = PrimaryKeys.object_id and c.column_id = PrimaryKeys.column_id
where c.OBJECT_ID = OBJECT_ID(@tabla,N'U')

Obsérvese que se usa la función OBJECT_ID para obtener el Id del Objeto que se quiere evaluar, otra opción sería:

OBJECT_NAME(ic.OBJECT_ID)  = @Tabla

pero es mas eficiente como se presenta en la consulta superior dado que sólo se ejecuta una vez la función escalar OBJECT_ID en lugar de una vez por cada registro, se observa también el uso de una instrucción CTE para calcular las llaves de la tabla

 

Los comentarios son bienvenidos, espero sea de ayuda,

FREDY LEANDRO ANGARITA CASTELLANOS
Sql Server MVP

Deja un comentario

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