2009-10-19 61 views
0

我想添加一个约束的列取决于不同的表中的一列。 例如,如果在表T1中我有一个字符串列str1,并且在表T2上我有一个字符串clumn str2,我希望str1为null,除了当srt2 - “ok”时。约束 - sql服务器

回答

0

你可以使用在T1触发脚本(执行前),检查时的字符串应被插入到STR1,如果STR2等于“OK”

1

在约束你不能使用SELECT,但是用户定义的功能是允许的。所以你可以创建一个函数来从T2中检索str2。下面是一个例子设置:

create table t1 (id int, str1 varchar(max)) 
create table t2 (str2 varchar(10)) 
go 
create function dbo.GetStr2() returns varchar(10) 
as 
begin 
    declare @retval varchar(10) 
    select @retval = str2 from t2 
    return @retval 
end 
go 
alter table t1 add constraint CheckStr2Constraint 
    check (str1 is null or dbo.GetStr2() = 'ok'); 

您可以测试此类似:

insert into t2 values ('ok') 
insert into t1 values (1,'test') -- Succeeds 
insert into t1 values (1,null) -- Succeeds 
update t2 set str2 = 'not ok' 
insert into t1 values (1,'test') -- Fails 
insert into t1 values (1,null) -- Succeeds 

第三个INSERT将失败,因为str2的是“不正常”,而你插入一个非空的字符串。错误消息将如下所示:

The INSERT statement conflicted with the CHECK 
constraint "CheckStr2Constraint".