[英]MS SQL Server - What is the value of WITH CHECK in a foreign key constraint?
[英]CHECK constraint in SQL Server not allowing to exceed value from foreign key
我有以下两个表:
CREATE TABLE test1
(
ID int IDENTITY UNIQUE,
length int not null
)
CREATE TABLE test2
(
ID int IDENTITY UNIQUE,
test1number int references test1(ID),
distance int not null
)
示例:让我们将test1的值1和100(ID = 1,长度= 100)插入。 现在,将值1作为ID插入到test2中,并将test1number = 1插入到test1中作为参考。 我想创建一个约束,该约束将不允许写入距离大于100(距test1的长度)。
除程序外还有其他方法吗?
如果这是针对单个行的,并且我们不需要对所有具有相同test1number
值的行断言某些属性,那么执行此操作的一种方法是:
CREATE TABLE test1
(
ID int IDENTITY UNIQUE,
length int not null,
constraint UQ_test1_Length_XRef UNIQUE (ID,Length)
)
go
CREATE TABLE _test2
(
ID int IDENTITY UNIQUE,
test1number int references test1(ID),
_test1length int not null,
distance int not null,
constraint FK_test2_test1_length_xref foreign key (test1number,_test1length)
references test1 (ID,length) on update cascade,
constraint CK_length_distance CHECK (distance <= _test1length)
)
go
create view test2
as
select ID,test1number,distance from _test2
go
create trigger T_I_t2 on test2
instead of insert
as
insert into _test2(test1number,_test1length,distance)
select test1number,length,distance
from inserted i inner join test1 t on i.test1number = t.id
go
如果您要向用户隐藏_test2
表中此额外列的存在,则仅需要视图和触发器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.