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

时间:2019-01-09 21:22:13

标签: sql sql-server

我有两个使用链接服务器连接的数据库,我只有DB1和DB2,我只能对其进行读取访问。我正在为我的应用程序使用DB1,并且已经链接了DB2,因此可以合并查询。在DB1中是否可以有链接到DB2的外键?

1 个答案:

答案 0 :(得分:1)

否,不可能在不同数据库中的对象之间创建外键(即使它们位于相同服务器上)。官方documentation对此非常清楚:

  

FOREIGN KEY约束只能引用同一服务器上同一数据库中的表。跨数据库参照完整性必须通过触发器实现。有关更多信息,请参见CREATE TRIGGER (Transact-SQL)

它甚至为您指出了可能的解决方法,即尝试使用触发器实施某种参照完整性检查。您可以在两侧的插入/更新触发器之后添加以验证数据更改,也可以在主表上的删除触发器之后添加以检查是否存在子记录。如果验证失败,您将raise an error。您也可以使用instead of triggers

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