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

Interesting Posts

Бесконечные дискуссии: атомные вставки, блокировка и транзакции в SQL Server. Он заканчивается здесь

Как проверить, что элемент XML имеет атрибут с пустым строковым значением

Как удаленно отлаживать хранимую процедуру в одном домене?

Объединение Varchar и int

Ошибка SQL Server «Не удается найти тип данных»

Группирование и агрегирование поля в одном SQL-запросе

Программно генерировать первые n запросов для Microsoft SQL Server из общего запроса

Удалить все хранимые процедуры в конкретной схеме SQL Server

Почему параметризованная версия этого запроса выполняется медленнее, чем непараметрированная версия?

Объединение двух родительских наборов дочерних таблиц

Задача арифметики даты sqlserver

Какая польза от упаковки каждого вызова sql / stored proc в транзакции?

Неверный порядок в Табличной функции (сохраняйте «порядок» рекурсивного CTE)

Как преобразовать varchar в datetime и пропустить недействительное datetime в TSQL

Хранимая процедура SQL Server с использованием связанного сервера

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