我有两个使用链接服务器连接的数据库,我只有DB1和DB2,我只能对其进行读取访问。我正在为我的应用程序使用DB1,并且已经链接了DB2,因此可以合并查询。在DB1中是否可以有链接到DB2的外键?
答案 0 :(得分:1)
否,不可能在不同数据库中的对象之间创建外键(即使它们位于相同服务器上)。官方documentation对此非常清楚:
FOREIGN KEY约束只能引用同一服务器上同一数据库中的表。跨数据库参照完整性必须通过触发器实现。有关更多信息,请参见CREATE TRIGGER (Transact-SQL)。
它甚至为您指出了可能的解决方法,即尝试使用触发器实施某种参照完整性检查。您可以在两侧的插入/更新触发器之后添加以验证数据更改,也可以在主表上的删除触发器之后添加以检查是否存在子记录。如果验证失败,您将raise an error。您也可以使用instead of triggers。
但是使用触发器的解决方案无论如何也不能保证引用完整性。您可能会失去数据库之间的连接。您可以从较早的备份中还原数据库之一。各种事情都会出错。您最好尝试重新考虑数据库设计。是否可以将这两个数据库合并为一个?是否可以将两个表的副本维护到每个数据库中并尝试复制内容?