【问题标题】:Foreign key in SQL Server 2008 pointing to another databaseSQL Server 2008 中的外键指向另一个数据库
【发布时间】:2011-08-23 18:38:47
【问题描述】:

如何添加引用另一个数据库的外部列的约束?

前段时间我读到它可以用链接服务器完成,其他人说用触发器。如果可能的话,首选的方法是什么?

谢谢!

【问题讨论】:

    标签: sql-server-2008 foreign-keys constraints


    【解决方案1】:

    链接的服务器将无法工作。
    FK 必须指向本地表。
    首选的方法是,尽管您可以通过一些技巧来实现它。
    例如,您可以触发 cause 要创建/检查的引用,但我认为这不等同于 FK 约束。

    相关问题: Can you have a Foreign Key onto a View of a Linked Server table in SQLServer 2k5?

    【讨论】:

    • 很容易遵守规则!我说的是preferred,因为项目规范规定某些特定的表必须驻留在主数据库之外。我想我会把你关于触发器的建议和@HLGEM 关于允许多次插入/删除等的想法和一个异常表混合起来,以使其可审计。
    • @chok 他们可以在同一台机器上的不同数据库上吗?
    【解决方案2】:

    使用代替触发器(您可能需要也可能不需要链接服务器,具体取决于其他数据库是否在不同的服务器上)。确保触发器可以处理多行插入/更新/删除。我还建议将未通过检查的记录移至异常表。

    【讨论】:

      【解决方案3】:

      外键不能跨越数据库边界。如果你尝试这样做,你会得到:

      消息 1763,第 16 级,状态 0,第 1 行
      跨数据库外键 不支持引用。外键 ***
      消息 1750,第 16 级,状态 0,第 1 行
      无法创建约束。查看以前的错误。

      如果您需要在两个单独的数据库之间强制建立某种关系,那么可以 - 您可能需要一个链接服务器(如果该第二个数据库位于第二个服务器上),并且可能需要触发器 - 但所有这些事情都会非常很难做到正确,效率很低,而且很容易出错。

      您可能能够做到这一点的一种方法是数据复制 - 将您要引用的表复制到源数据库中,然后与该复制表建立外键关系。但这永远不会完全“实时”和“实时”——数据复制也会有一点延迟。

      【讨论】:

        猜你喜欢
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-27
        • 1970-01-01
        • 2012-12-13
        相关资源
        最近更新 更多