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,则检查另一个表