sql server - tablas - ¿Cómo puedo determinar si una columna está en la clave principal de su tabla?(Servidor SQL)
tablas grandes mysql (3)
Actualmente estoy usando ...
select Table_Name, Column_name, data_type, is_Nullable
from information_Schema.Columns
... para determinar información sobre columnas en una base de datos dada con el propósito de generar una capa de DataAccess.
¿Desde dónde puedo recuperar información sobre si estas columnas son participantes en la clave principal de su tabla?
Aquí hay una forma (reemplace ''keycol'' con el nombre de la columna que está buscando):
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'';
Del mismo modo, lo siguiente le dará información sobre todas las tablas y sus claves, 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
Para su necesidad, unión externa completa con INFORMATION_SCHEMA.COLUMNS e 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 C.TABLE_NAME=@TABLENAME