我有以下表定义:
CREATE TABLE X (
A SOMETYPE NOT NULL,
B SOMETYPE NOT NULL,
C SOMETYPE NULL,
PRIMARY KEY (A,B),
FOREIGN KEY (A) REFERENCES Y (A)
);
我想添加以下约束:如果C IS NOT NULL,则FOREIGN KEY(A,C)REFERENCES X(A,B).我该怎么做(如果可能的话,不使用触发器)?
我使用的是SQL Server 2008 R2,但这与问题无关.
最佳答案 如果我得到你想要的东西你需要在表Y中的A上有一个主键,在表Y中有A,B的唯一约束.
试试这个:
create table Y
(
A int not null,
B int not null,
primary key (A)
);
create unique index IX_Y_AB on Y(A, B);
create table X
(
A int not null,
B int not null,
C int null,
primary key (A, B),
foreign key (A) references Y(A),
foreign key (A, C) references Y(A, B)
);
测试:
insert into Y values (1, 2)
insert into X values (1, 1, null) -- OK
insert into X values (1, 2, 2) -- OK
insert into X values (1, 3, 3) -- Fail