Внешний ключ в SQL Server 2008, указывающий на другую базу данных - PullRequest
0 голосов
/ 23 августа 2011

Как я могу добавить ограничение, которое ссылается на чужой столбец из другой базы данных?

Некоторое время назад я читал, что это можно сделать с помощью связанного сервера, а другие говорят, с помощью триггеров.Какой предпочтительный способ сделать это, если это вообще возможно?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 23 августа 2011

Связанные серверы не будут работать.
ФК должны указывать на локальные таблицы.
Для этого предпочтительным является , а не , хотя вы можете сделать несколько хаков, чтобы это произошло.
Например, у вас могут быть триггеры , вызывающие ссылку, которая будет создана / проверена, но я не считаю это эквивалентом ограничения FK.

Похожие вопросы: Можно ли использовать внешний ключ для представления таблицы связанного сервера в SQLServer 2k5?

2 голосов
/ 23 августа 2011

Используйте триггер вместо (вам могут или не могут понадобиться связанные серверы в зависимости от того, находится ли другая база данных на другом сервере).Убедитесь, что триггер может обрабатывать несколько строк вставки / обновления / удаления.Я бы также предложил перенести записи, которые не прошли проверку, в таблицу исключений.

2 голосов
/ 23 августа 2011

Внешние ключи не могут выходить за границы базы данных.Если вы попытаетесь это сделать, вы получите:

Сообщение 1763, Уровень 16, Состояние 0, Строка 1
Ссылки внешнего ключа между базами данных не поддерживаются.Внешний ключ ***
Сообщение 1750, уровень 16, состояние 0, строка 1
Не удалось создать ограничение.См. Предыдущие ошибки.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...