SQL Server 2008: узнать первичный / внешний ключ в таблице?
Кто-нибудь знает, как я могу видеть, какие первичные и внешние ключи в таблице?
EDIT: Спасибо за все ответы. Я искал SQL-запрос для этого. Прямо сейчас я играю с написанием инструмента, который может перечислить мне все таблицы БД и показать столбцы. Я также хотел бы отобразить, какие из ключей являются первичными ключами.
Вот как я зачитал каталог таблиц:
const string sqlSelectTable = "SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE " + "FROM INFORMATION_SCHEMA.TABLES " + "WHERE TABLE_TYPE = 'BASE TABLE' " + "ORDER BY TABLE_TYPE,TABLE_NAME";
И вот как я получаю информацию о столбце:
const string sqlSelectTable = "SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH " + "FROM INFORMATION_SCHEMA.COLUMNS " + "WHERE (TABLE_NAME = @TABLE_NAME) " + "ORDER BY ORDINAL_POSITION";
Должен ли я создать Inner-Join, чтобы увидеть, какой из столбцов является Первичным ключом?
ура
Для первичного ключа в каждой таблице вы можете использовать этот запрос:
SELECT kc.name, c.NAME FROM sys.key_constraints kc INNER JOIN sys.index_columns ic ON kc.parent_object_id = ic.object_id INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id WHERE kc.type = 'PK'
и для внешнего ключа, я считаю, что этот запрос должен предоставить вам необходимую информацию:
SELECT OBJECT_NAME(parent_object_id) 'Parent table', c.NAME 'Parent column name', OBJECT_NAME(referenced_object_id) 'Referenced table', cref.NAME 'Referenced column name' FROM sys.foreign_key_columns fkc INNER JOIN sys.columns c ON fkc.parent_column_id = c.column_id AND fkc.parent_object_id = c.object_id INNER JOIN sys.columns cref ON fkc.referenced_column_id = cref.column_id AND fkc.referenced_object_id = cref.object_id
Марк
в разделе « Часто задаваемые вопросы о системном каталоге SQL Server». Как найти столбцы первичного ключа для указанной таблицы? и Как найти столбцы внешнего ключа для указанной таблицы?
EDIT: если вы хотите сделать это программно (что неясно из вашего вопроса), то есть.
В Management Studio разверните таблицу, а затем разверните элемент «Столбцы». Первичный ключ (ы) имеет значок рядом с ним.
Чтобы просмотреть внешние ключи, разверните элемент «Ограничения».
Вы можете начать с:
SELECT Table_Name as [TableName], Column_Name as [ColumnName], Constraint_Name as [Constraint], Table_Schema as [Schema] FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE ORDER BY [TableName], [ColumnName]
(вы можете затем фильтровать по tableName)
SELECT OBJECT_NAME(parent_object_id) 'Parent table', c.NAME 'Parent column name', OBJECT_NAME(referenced_object_id) 'Referenced table', cref.NAME 'Referenced column name' FROM sys.foreign_key_columns fkc INNER JOIN sys.columns c ON fkc.parent_column_id = c.column_id AND fkc.parent_object_id = c.object_id INNER JOIN sys.columns cref ON fkc.referenced_column_id = cref.column_id AND fkc.referenced_object_id = cref.object_id where OBJECT_NAME(parent_object_id) = 'tablename'
Если вы хотите, чтобы отношение внешних ключей всех таблиц исключало предложение where
, напишите ваше имя в виде таблицы, а не tablename