使用Microsoft SQL在表和视图之间建立关系

时间:2013-04-10 08:51:49

标签: sql-server foreign-key-relationship

是否有自然选择在表和视图之间建立关系,或者我应该使用触发器作为解决方法来检查数据的一致性?

我有一个查找视图(由于某种原因,我需要它是视图而不是表)。 我想将记录插入到不同的表中。我要插入的记录的其中一个值必须是查找视图中的一个ID。

例如:

ViewCities(CityId,CityName) - 这是查看视图。视图后面的表位于不同的数据库中。 现在我想向tblUsers插入新行。其中一行是CityId。我希望没有人能够在包含ViewCities上不存在的cityid的tblUsers中插入一行。

1 个答案:

答案 0 :(得分:0)

我知道有两个选项可以保持参照完整性。您不能使用外键约束,因为您说这些表位于两个单独的数据库中。选项是: 1.如前所述,使用触发器。 2.使用检查约束,该约束引用执行检查的用户定义函数。

例如:

假设我有一个名为test的数据库,另一个数据库是Northwind数据库。在我的测试数据库中,我想创建一个记录用户名称的表。我想强制执行的检查是用户名必须是Northwind数据库中用户的LastName之一。我首先创建一个这样的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数据库中Employees表的Last Names之一。