使用链接服务器在两个不同数据库之间拥有外键?

Kam*_*ami 6 sql sql-server

我有两个使用链接服务器连接的数据库。我有 DB1 和 DB2,我只有读取访问权限。我在我的应用程序中使用 DB1,并链接了 DB2,这样我就可以组合查询。DB1 中是否可以有链接到 DB2 的外键?

And*_*lov 3

不,不可能在不同数据库中的对象之间创建外键(即使它们位于同一服务器上)。官方文档对此说得很清楚:

FOREIGN KEY 约束只能引用同一服务器上同一数据库内的表。跨数据库引用完整性必须通过触发器来实现。有关详细信息,请参阅创建触发器 (Transact-SQL)

它甚至向您指出可能的解决方法,即尝试使用触发器实现某种引用完整性检查。您可以在两侧添加after insert/update触发器来验证数据更改,并在主表上添加after delete触发器来检查是否有子记录。如果验证失败,您将引发错误。您也可以使用触发器来代替

但无论如何,带有触发器的解决方案都无法保证引用完整性。您可能会失去数据库之间的连接。您可以从较旧的备份恢复其中一个数据库。所有事情都可能出错。您最好尝试重新考虑您的数据库设计。是否可以将这两个数据库合二为一?是否可以将两个表的副本维护到每个数据库中并尝试复制内容?