Sql server SQL Server条件外键约束

Sql server SQL Server条件外键约束,sql-server,ddl,Sql Server,Ddl,我很难弄清楚如何创建外键约束。我的数据模型已修复,无法控制,如下所示: CREATE TABLE Enquiry (Enquiry_Ref INTEGER PRIMARY KEY CLUSTERED, Join_Ref INTEGER, EnquiryDate, EnquiryType...) CREATE TABLE Contact (Contact_Ref INTEGER PRIMARY KEY CLUSTERED, Surname, Forenames ....) CREA

我很难弄清楚如何创建外键约束。我的数据模型已修复,无法控制,如下所示:

CREATE TABLE Enquiry 
  (Enquiry_Ref INTEGER PRIMARY KEY CLUSTERED, Join_Ref INTEGER, EnquiryDate, EnquiryType...)

CREATE TABLE Contact 
  (Contact_Ref INTEGER PRIMARY KEY CLUSTERED, Surname, Forenames ....)

CREATE TABLE UniversalJoin 
  (Join_Ref INTEGER, Contact_Ref INTEGER, Rel_Type INTEGER)
每个查询只有一个联系人。两者之间的链接是UniversalJoin表,其中

Enquiry.Join_Ref = UniversalJoin.Join_Ref AND 
Rel_Type = 1 AND
UniversalJoin.Contact_Ref = Contact.Contact_Ref
Rel_类型根据源表的不同而不同,因此在查询的情况下,Rel_类型为1,但对于另一个表,它将设置为N

我的问题是如何创建外键约束以强制执行此关系的完整性?我想说但不能说的是:

CREATE TABLE Enquiry 
  ...
  CONSTRAINT FK_Foo 
  FOREIGN KEY (Join_Ref)
  REFERENCES UniversalJoin (JoinRef WHERE Rel_Type=1)

你可能更想看看

检查约束强制域 通过限制 被列接受。他们是 类似于中的外键约束 它们控制的值是 放进一列。区别在于 它们如何确定哪些值是 有效:获取外键约束 来自其他服务器的有效值列表 表,并检查约束确定 逻辑数据库中的有效值 不基于数据的表达式 在另一个专栏里


不能在SQL Server中使用条件外键或筛选外键

在这些情况下,可以在(JoinRef,Rel_类型)之间设置多列FK,并在UniversalJoin中的Rel_类型上设置检查约束,使其为1


但是,我认为您正在尝试创建一个包含多个父级的行,这是无法完成的。

您可以使用带有INSERT和Update的表触发器将等效项作为FK进行分层

通过这种方式,您可以应用条件,即如果列值=1,则检查表a中是否存在列值=2,如果列值=2,则检查另一个表