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

Давайте будем гением компьютера.