我知道您有两个选项可以保持参照完整性。您不能使用外键约束,因为您说这些表位于两个单独的数据库中。选项是: 1. 使用触发器,正如您所提到的。2. 使用一个检查约束,它引用一个用户定义的函数来进行检查。
例如:
假设我有一个名为 test 的数据库,另一个数据库是 Northwind 数据库。在我的测试数据库中,我想创建一个记录用户名的表。我要强制执行的检查是用户名必须是 Northwind 数据库中用户的姓氏之一。我首先像这样创建一个UDF:
create function chk_name (@name varchar(50))
returns bit
as
begin
declare @name_found bit=0
if exists(select * from Northwind..Employees where LastName=@name)
begin
set @name_found=1
end
return @name_found
end
然后,我使用如下检查约束创建表:
create table tst
(name varchar(50) check ( dbo.chk_name(name)=1 )
)
现在,如果您尝试在 tst 表中插入一行,则它必须是 Northwind 数据库中员工表的姓氏之一。