【发布时间】:2011-08-23 18:38:47
【问题描述】:
如何添加引用另一个数据库的外部列的约束?
前段时间我读到它可以用链接服务器完成,其他人说用触发器。如果可能的话,首选的方法是什么?
谢谢!
【问题讨论】:
标签: sql-server-2008 foreign-keys constraints
如何添加引用另一个数据库的外部列的约束?
前段时间我读到它可以用链接服务器完成,其他人说用触发器。如果可能的话,首选的方法是什么?
谢谢!
【问题讨论】:
标签: sql-server-2008 foreign-keys constraints
链接的服务器将无法工作。
FK 必须指向本地表。
首选的方法是不,尽管您可以通过一些技巧来实现它。
例如,您可以触发 cause 要创建/检查的引用,但我认为这不等同于 FK 约束。
相关问题: Can you have a Foreign Key onto a View of a Linked Server table in SQLServer 2k5?
【讨论】:
使用代替触发器(您可能需要也可能不需要链接服务器,具体取决于其他数据库是否在不同的服务器上)。确保触发器可以处理多行插入/更新/删除。我还建议将未通过检查的记录移至异常表。
【讨论】:
外键不能跨越数据库边界。如果你尝试这样做,你会得到:
消息 1763,第 16 级,状态 0,第 1 行
跨数据库外键 不支持引用。外键 ***
消息 1750,第 16 级,状态 0,第 1 行
无法创建约束。查看以前的错误。
如果您需要在两个单独的数据库之间强制建立某种关系,那么可以 - 您可能需要一个链接服务器(如果该第二个数据库位于第二个服务器上),并且可能需要触发器 - 但所有这些事情都会非常很难做到正确,效率很低,而且很容易出错。
您可能能够做到这一点的一种方法是数据复制 - 将您要引用的表复制到源数据库中,然后与该复制表建立外键关系。但这永远不会完全“实时”和“实时”——数据复制也会有一点延迟。
【讨论】: