2008-10-21 21 views

Respuesta

30

Aquí es una manera (reemplace 'keycol' con el nombre de la columna que está buscando a):

SELECT K.TABLE_NAME, 
K.COLUMN_NAME, 
K.CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C 
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K 
ON C.TABLE_NAME = K.TABLE_NAME 
AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG 
AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA 
AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME 
WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY' 
AND K.COLUMN_NAME = 'keycol'; 
+0

También debe tener el nombre de tabla de interés en su cláusula where. De lo contrario, si hay alguna otra tabla con una clave principal que tenga el mismo nombre de columna que la clave principal de la tabla que le interesa, obtendrá ese resultado. – Markus

6

Del mismo modo, la siguiente información le dará información sobre todas las tablas y sus llaves, en lugar de información sobre columnas específicas. De esta manera, se asegura de tener todas las columnas de interés y saber en qué participan. Para ver todas las claves (primaria, extranjera, única), comente la cláusula WHERE.

SELECT K.TABLE_NAME, C.CONSTRAINT_TYPE, K.COLUMN_NAME, K.CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C 
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K 
ON C.TABLE_NAME = K.TABLE_NAME 
AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG 
AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA 
AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME 
WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY' 
ORDER BY K.TABLE_NAME, C.CONSTRAINT_TYPE, K.CONSTRAINT_NAME 
3

Para su necesidad, externa completa con INFORMATION_SCHEMA.COLUMNS y INFORMATION_SCHEMA.KEY_COLUMN_USAGE. En la instrucción de selección, agregue la columna CONSTRAINT_NAME de INFORMATION_SCHEMA.KEY_COLUMN_USAGE que le dará null o keyname.

select C.Table_Name, C.Column_name, data_type, is_Nullable, U.CONSTRAINT_NAME 
from information_Schema.Columns C FULL OUTER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE U ON C.COLUMN_NAME = U.COLUMN_NAME 
WHERE [email protected] 
+0

Excelente respuesta pero debe agregar TABLE_NAME también en la cláusula WHERE para asegurarse de que estamos extrayendo PK de la tabla correcta, de lo contrario cargará todos los PK de la tabla, mientras que los nombres de los campos PK serán los mismos para múltiples tablas durante la combinación externa completa. –

Cuestiones relacionadas