2009-10-19 2 views
0

다른 테이블의 열에 종속 된 열에 제약 조건을 추가하고 싶습니다. 예를 들어 테이블 T1에 문자열 열 str1이 있고 테이블 T2에 문자열 열 str2가있는 경우 srt2 - "ok"를 제외하고 str1이 null이되도록합니다.제약 - SQL 서버

답변

0

당신은 문자열 str1과에 삽입 할 때에 STR2는 "확인"

1

당신은 제약에서 SELECT 사용할 수 없지만 사용자가 동일한 경우, 검사 T1에 (실행 전) 트리거 스크립트를 사용할 수 정의 된 함수가 허용됩니다. 따라서 T2에서 str2를 검색하는 함수를 작성할 수 있습니다. STR2가 '확인되지 않음'때문에,

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가 실패하고 당신은 null 이외의 캐릭터 라인을 삽입하고 있습니다 :

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'); 

이 같은 테스트 할 수 있습니다 예를 들면 다음과 같습니다 설정입니다. 오류 메시지는 다음과 같이 표시됩니다.

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