Цитируется из этого ответа здесь
Вам потребуется управлять ссылочным ограничением для баз данных с помощью триггера. ***************** По сути, вы создаете триггер вставки и обновления, чтобы проверить наличие ключа в таблице первичного ключа. Если ключ не существует, верните вставку или обновление, а затем обработайте исключение.
Пример:
Create Trigger dbo.MyTableTrigger ON dbo.MyTable, After Insert, Update
As
Begin
If NOT Exists(select PK from OtherDB.dbo.TableName where PK in (Select FK from inserted) BEGIN
-- Handle the Referential Error Here
END
END
Отредактировано: Просто чтобы уточнить. Это не лучший подход к обеспечению ссылочной целостности. В идеале вы хотели бы, чтобы обе таблицы были в одной базе данных, но если это невозможно. Тогда вышесказанное - потенциальный обходной путь для вас.
Как уже упоминалось в цитируемом ответе, наилучшим подходом было бы иметь таблицы в одной базе данных. Если вы можете сделать это, просто добавьте между ними foreign key
:
FOREIGN KEY constraint
- это ключ, используемый для связывания двух таблиц.
A FOREIGN KEY
- это поле (или набор полей) в одной таблице, которая ссылается на PRIMARY KEY
в другой таблице.
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
Так что в этом примере column
с именем PersonID
, расположенным в table
, с именем Orders
будет связываться через foreign key
до column
с именем PersonID
, расположенным в table
с именем Persons
.
Подробнее здесь или здесь