来自不同数据库的表上的外键

时间:2009-09-14 23:07:14

标签: sql sql-server sql-server-2005 tsql

我在SQL Server中有两个数据库,我有一个公用表,两个数据库都是一个重要的大表,它将外键保存到其他表中。问题是Table在 DatabaseA 中,我需要从 DatabaseB 中将外键引用到此表。

我知道SQL不支持跨数据库引用完整性,那么实现这一目标的最佳方法是什么?我正在考虑将两个数据库组合成一个数据库 - 除了复杂性的增加之外没有关系。

有什么建议吗?

3 个答案:

答案 0 :(得分:7)

如果可以的话,我会避免这样做 - 你可以将两个表保存在一个数据库中并使用FK吗?

父表和子表位于不同的数据库中。

虽然在这种情况下无法使用外键,但有一些解决方法 - 您可以使用包含在检查约束中的触发器或UDF。无论哪种方式,您的数据完整性都不是完全无懈可击的:如果包含父表的数据库崩溃并从备份中恢复它,您可能很容易就会遇到孤儿。

触发器强制执行父子关系。

触发器不会触发的情况很多,例如:

·表格被删除。

·表格被截断。

·嵌套和/或递归触发器的设置可防止触发器触发。

触发器也可能不正确。无论哪种方式,您最终都可能会在数据库中找到孤儿。

答案 1 :(得分:1)

这是一篇关于如何使用SSIS导入/导出向导的文章:

http://www.databasejournal.com/features/mssql/article.php/3580216/SQL-Server-2005-Import--Export-Wizard.htm

最简单的方法就是将一个数据库(我用两个中最小的一个)导出到最方便的格式,然后将其导入另一个。只要表名不同,就不会出现任何问题。

答案 2 :(得分:1)

可以编写触发器以强制针对不同数据库的引用完整性。