2014-02-19 4 views
0

Аналогичный вопрос задается здесь multiple foreign keys referencing single column in other table , но синтаксис в ответе не указан. Я хотел бы знать, как это можно сделать на SQL-сервере. Следующий синтаксис дает ошибкудве колонки, ссылающиеся на один столбец в другой таблице

ALTER TABLE ItemIssue ADD CONSTRAINT FK_ItemIssue_Person 
FOREIGN KEY (PersonID, AdvisorID) REFERENCES Person (PersonID) 
; 

ОШИБКА: Количество ссылок на столбцы внешних ключей отличается от числа ссылочных столбцов, таблица «ItemIssue».

-- Create Tables 
CREATE TABLE ItemIssue ( 
ItemIssueID int identity(1,1) NOT NULL, 
PersonID int, 
AdvisorID int, 
    ) 
; 
CREATE TABLE Person ( 
PersonID int NOT NULL, 
Name nvarchar(500), 
) 

;

ответ

2

Вам нужно определить два внешних ключей, по одному для каждого столбца:

ALTER TABLE ItemIssue ADD CONSTRAINT FK_ItemIssue_Person 
    FOREIGN KEY (PersonID) REFERENCES Person (PersonID) 
; 

ALTER TABLE ItemIssue ADD CONSTRAINT FK_ItemAdvisor_Person 
    FOREIGN KEY (AdvisorID) REFERENCES Person (PersonID) 
; 
+0

Спасибо за замечание. И я исследую эту тему, но я не знаю, почему два внешних ключа для одного столбца другой таблицы? Вы это объясняете? – Mesuti

0

невозможно создать один внешний ключ для двух столбцов, ссылающихся на один столбец. Создать их индивидуальный:

ALTER TABLE ItemIssue 
ADD CONSTRAINT FK_ItemIssue_Person_Person FOREIGN KEY (PersonID) REFERENCES Person (PersonID), 
ADD CONSTRAINT FK_ItemIssue_Advisor_Person FOREIGN KEY (AdvisorID) REFERENCES Person (PersonID); 
0

Для определения двух внешних ключей, по одному для каждого

-столбца

Таблица

Contract - HospidPharmacyId Колонка

Hospice- HospiceID PK Фармация PharmacyId Pk

  • Используя следующий запрос, мы можем применить 2 внешних ключа для 1.

Alter Table Контракт Добавить Constraint fk_pharmacyID Foreign Key ([HospIDPharmID]) ссылки Фармация ([PharmacyID])

Alter контракт СТОЛ Добавить Constraint Fk_hospId Foreign ключ ([HospIDPharmID]) ссылается хоспис (HospiceID)

  • в контракте таблице для столбца-HospidPharmacyId мы можем вставить общее значение в обоих

столы. те, которые присутствуют в хосписе & не в аптеке, тогда мы не можем вставить это значение в

таблица контрактов & наоборот.

Смежные вопросы