Внешний ключ, ссылающийся на первичный ключ на 2 столбца в SQL Server

Этот вопрос в значительной степени подобен этому, но для SQL Server 2005:

У меня есть 2 таблицы в моей базе данных:

--'#' denotes the primary key
[Libraries]
#ID   #Application  Name
 1     MyApp        Title 1
 2     MyApp        Title 2


[Content]
#ID   Application  LibraryID  Content
 10    MyApp       1          xxx
 11    MyApp       1          yyy

(база данных, очевидно, намного более сложна и имеет, этот двойной ключ имеет смысл),

Каждая библиотека определяется ее уникальным идентификатором и Именем приложения. Я пытаюсь удостовериться, что каждое содержание правильно ссылается на существующую библиотеку.

При создании ограничения (использующий Мастер) как

Primary key table            Foreign key table
[Libraries]                  [Content]
ID                  --->     LibraryID
Application         --->     Application

У меня есть следующая ошибка:

Столбцы в таблице 'Libraries' не соответствуют существующему первичному ключу или ограничению UNIQUE

У Вас есть какая-либо идея того, что продолжается? и если это возможно во всем SQL Server использования? (Я не могу изменить таблицу [Library] вообще),

Большое спасибо за Вашу справку!

31
задан Community 23 May 2017 в 11:33
поделиться

2 ответа

Конечно, можно создать отношение внешнего ключа к составной (более одного столбца) первичный ключ. Вы не показали нам утверждение, которое вы используете, чтобы попытаться создать эти отношения - оно должно быть примерно таким:

ALTER TABLE dbo.Content
   ADD CONSTRAINT FK_Content_Libraries
   FOREIGN KEY(LibraryID, Application)
   REFERENCES dbo.Libraries(ID, Application)

Это то, что вы используете ?? Если (ID, Application) действительно является первичным ключом в dbo.Libraries , этот оператор определенно должен работать.

Люк: просто для проверки - можете ли вы запустить этот оператор в своей базе данных и сообщить, какой будет результат ??

SELECT
    tc.TABLE_NAME,
    tc.CONSTRAINT_NAME, 
    ccu.COLUMN_NAME
FROM 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu 
      ON ccu.TABLE_NAME = tc.TABLE_NAME AND ccu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
WHERE
    tc.TABLE_NAME IN ('Libraries', 'Content')
49
ответ дан 27 November 2019 в 22:10
поделиться

Таблица Content , вероятно, будет иметь несколько повторяющихся значений Application , которые не могут быть сопоставлены с библиотеками . Можно ли удалить столбец Приложение из индекса первичного ключа Библиотеки и добавить его вместо него в качестве индекса уникального ключа?

1
ответ дан 27 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: