Внешние ключи на таблице из разных баз данных

У меня есть две базы данных в SQL Server, и у меня есть общая таблица для обеих баз данных, важная большая таблица, которая содержит внешние ключи для других таблиц. Проблема заключается в том, что таблица находится в DatabaseA, и мне нужно передать внешние ключи в эту таблицу из DatabaseB.

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

Любые предложения?

Ответы

Ответ 1

Я бы не стал делать это, если бы мог - можете ли вы просто сохранить обе таблицы в одной datbase и использовать FK?

Родительские и дочерние таблицы находятся в разных базах данных.

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

Отношения родитель-ребенок привязаны к триггерам.

Существует множество ситуаций, когда триггеры не срабатывают, например:

. Таблица отбрасывается.

. Таблица усечена.

. Настройки для вложенных и/или рекурсивных триггеров предотвращают запуск триггера.

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

Ответ 2

Вот статья о том, как использовать мастер импорта/экспорта SSIS:

http://www.databasejournal.com/features/mssql/article.php/3580216/SQL-Server-2005-Import--Export-Wizard.htm

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

Ответ 3

Триггеры могут быть записаны для обеспечения ссылочной целостности в отношении разных баз данных.