繁体   English   中英

SQL Server中的CHECK约束不允许超过外键的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM