sql - 添加两个数据库之间的外键关系

标签 sql sql-server tsql foreign-keys

我在两个不同的数据库中有两个表。在table1(在database1)中,有一个名为column1的列,它是主键。现在在表2(在数据库2)中有一个名为column2的列,我想将其添加为外键。

我尝试添加它,但出现以下错误:

Msg 1763, Level 16, State 0, Line 1
Cross-database foreign key references are not supported. Foreign key Database2.table2.

Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.

由于这些表位于不同的数据库中,我该如何做到这一点。

最佳答案

您需要使用触发器管理跨数据库的引用约束。

<小时/>

基本上,您创建一个插入、更新触发器来验证主键表中键是否存在。如果该键不存在,则恢复插入或更新,然后处理异常。

示例:

Create Trigger dbo.MyTableTrigger ON dbo.MyTable, After Insert, Update
As
Begin

   If NOT Exists(select PK from OtherDB.dbo.TableName where PK in (Select FK from inserted) BEGIN
      -- Handle the Referential Error Here
   END

END
<小时/>

已编辑:只是为了澄清。这不是强制引用完整性的最佳方法。理想情况下,您希望两个表位于同一个数据库中,但如果这是不可能的。那么以上就是您可能的解决方法。

关于sql - 添加两个数据库之间的外键关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4452132/

相关文章:

sql - 如何通过一个查询获取数据库的总行数

sql - RDBM 和 SQL 数据库中主键、自增和 UUID 的最佳实践

php - Opencart 禁用 Mysql/Php 错误显示

sql - 唯一 ID 的连续行中的值之间的差异

sql - 为什么 SQL Server 没有默认强制使用 WHERE 子句?

mysql - 为特定值选择每个最新的行

sql-server - 在 SQL 中仅选择唯一的连续行

php - PHP-mssql-mssql_get_last_message()返回空字符串

sql - TSQL:提交时触发

sql - 通过函数更新字段