Obtener la llave primaria de una tabla
Normalmente y una de las primeras (además de ser la forma en que funciona para todas las versiones), dado que usa las consultas estándard INFORMATION_SCHEMA, es la que se presenta a continuación:
declare @Keys varchar(8000) set @Keys = '' --Se estable a cadena vacía porque si deja en nulo el resultado final sería nulo SELECT @Keys = @Keys + COALESCE(isc.COLUMN_NAME + ',' , '') FROM INFORMATION_SCHEMA.COLUMNS AS isc INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS kcs ON isc.TABLE_NAME = kcs.TABLE_NAME AND isc.COLUMN_NAME = kcs.COLUMN_NAME AND LEFT(kcs.CONSTRAINT_NAME, 2) = 'PK' print @Keys --Presenta las llaves separadas por coma
Otra consulta, en la que se usa la metadata de la base de datos es: (y la recomendada):
SELECT i.name AS IndexName, OBJECT_NAME(ic.OBJECT_ID) AS TableName, COL_NAME(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 i.is_primary_key = 1
El uso de la primera o la segunda estará determinado por la versión de sql y qué tan estándard es la solución que se esté desarrollando
Espero sea de ayuda,
Como se observa en el artículo [CODE] Cómo obtener la llave primaria de una tabla , es
Se presenta el script para obtener todos los campos de una tabla y saber cual(es) de ellos son llave