Узнайте, что такое первичный ключ и внешний ключ в таблице

#sql #sql-server

#sql #sql-сервер

Вопрос:

Я использую следующую инструкцию, чтобы вернуть сведения о таблице sql, и это работает, однако, похоже, я не могу понять, как узнать, что является полем первичного ключа таблицы, кто-нибудь знает, как этого добиться.

 SELECT c.name Field, 
    t.name Type,
    c.max_length MaxLength,
    c.Precision, 
    c.Scale,
    c.is_nullable,
    c.collation_name,
    '"  tableName   "' TableName FROM sys.columns c INNER JOIN sys.types t ON c.user_type_id = t.user_type_id WHERE object_id = object_id('"   tableName   "') ORDER BY column_id";
  

В идеале я хотел бы иметь другое поле в приведенной выше таблице, чтобы определить, является ли это первичным ключом или внешним ключом. есть ли способ добиться этого вообще, даже если это логическое поле «да» или «нет»?.

Я объясняю вам, почему я создаю таблицу обратного проектирования для платформы xml для Sage 200, и для создания правильного xml мне нужна приведенная выше информация

Комментарии:

1. Почему вы предполагаете, что первичный ключ — это «поле»? Что такое первичный ключ? Это ограничение. Где вы находите информацию об ограничениях в метаданных?

Ответ №1:

Попробуйте запрос, приведенный ниже. Пожалуйста, обратите внимание:

  • Я только тестирую его для сценария, описанного (Клиент -> Адрес) на иллюстрации ниже;
  • Версия Microsoft SQL Server — Microsoft SQL Server 2016 (RTM-GDR) (KB4019088) — 13.0.1742.0 (X64) 5 июля 2017 23:41:17 Авторское право (c) Microsoft Corporation Developer Edition (64-разрядная версия) на Windows 10 Home 6.3 (сборка 17763: );

введите описание изображения здесь

 SELECT
    C.name,
    C.column_id,
    C.object_id,
    C.max_length MaxLength,
    C.Precision, 
    C.Scale,
    C.is_nullable,
    C.collation_name,
    FK.name AS FK_name,
    KC.name AS PK_name
FROM
    sys.columns AS C
LEFT OUTER JOIN
    sys.foreign_key_columns AS FKC ON C.object_id = FKC.parent_object_id AND C.column_id = FKC.parent_column_id
LEFT OUTER JOIN
    sys.foreign_keys AS FK ON  FKC.constraint_object_id = FK.object_id
LEFT OUTER JOIN
    sys.key_constraints AS KC ON  C.object_id = KC.parent_object_id AND C.column_id = KC.unique_index_id
WHERE
    C.object_id = OBJECT_ID('<table name>')
ORDER BY
    C.column_id
  

— Вывод для таблицы Customer выше —

введите описание изображения здесь

Ответ №2:

Выделите таблицу и затем нажмите ALT F1 введите. Прокрутите вниз, чтобы получить информацию о PK и FK

Ответ №3:

TABLENAME указывает имя вашей таблицы

  SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TABLENAME'
  

Комментарии:

1. Я не вижу там поля в результатах, в котором говорится, что первичный ключ просто обнуляется, но ничего, что указывало бы на его первичный ключ.

2. Пожалуйста, не создавайте несколько ответов отредактируйте свой существующий ответ для изменения.

3. Пожалуйста, прокрутите вниз, чтобы увидеть это