【发布时间】:2014-06-03 16:07:31
【问题描述】:
我目前正在创建一个数据库,它本质上是另一个数据库的子数据库。当我们的客户获得我们的软件时,他们会获得一个数据库,我们称之为 MasterBase。该数据库包含两个不同的小型数据库的架构,我们称它们为 MasterC 和 MasterF。
我的工作是获取与 MasterF 相关的所有模式并将它们放入自己的数据库中。问题是 MasterC 中有很多对表和视图的引用。为了解决这个问题,我将添加一个将 MasterF 与 MasterC 配对的属性,以便在我的 .NET 解决方案中我应该能够执行以下操作:
表 tableName....(在 MasterF 中创建表) 参考文献 .... MasterC.dbo.tableC(MasterC 中的表)
但是,在 SQL 中,这会引发错误:不支持 MSG 1763 跨数据库外键引用。
我已经阅读了最常见的解决方法是添加一个触发器,但是看到这并不安全并且有很多这样的实例我想知道是否还有其他方法,也许是存储过程或类似的东西.
如果触发器确实是最好/唯一的方法,并且我必须为每个有此问题的表添加触发器,我将如何编写此触发器,我知道一点 SQL,但几乎不精通。
请帮忙!
【问题讨论】:
-
引发错误的实际代码是什么?
-
FK 不能配合,编写一组触发器来做同样的事情会让人头疼。这背后的原因是为了分离文件吗?您可以将表分配给备用数据库文件并独立移动它们。
-
分离数据库的目的是让它们可以单独构建。因此,有些客户可能需要两者,而有些客户可能只需要其中一个。如果客户需要独立的 MasterF,我正在创建的工具将通过简单地不构建引用 MasterC 的模式来解决此问题。但是,如果两者都需要,则保证 MasterC 存在,因此可以引用。
-
为什么不建立合适的数据库:C、F 和 C+F?
-
这就是我想要做的,但是如果不引用 C 的某些模式,我就无法构建 F... C+F 是标准,因为它们密切相关,这是一个新功能我正在处理的客户。我想我不明白你在问什么,因为这几乎就是我想要问的......
标签: sql database sql-server-2008 foreign-keys cross-database