2013-12-12 2 views
1

복합 기본 키가있는 테이블 (SQL Server 2008)이 있습니다. 나는이 문제?SQL Server Management Studio - 복합 기본 키

insert into myTable values ('A','B') 
insert into myTable values ('B','A') 

내가 UNIQUE 제한 및 WITH_IGNORE_DUP_KEYS와 시도를 방지 할 수 있지만 그것을 해결할 수있는 방법.

미리 감사드립니다.

답변

2

는, 하나 개의 솔루션은 "작은"사람이 항상 첫 번째 컬럼에 저장되도록 값을 삽입 강제하는 것입니다 :

alter table myTable add constraint chk_pk 
    check (col1_1 <= col_2); 

그렇게하지 않으면 삽입시 값의 특별한 "순서 지정"을 강요하고 싶지 않으므로) 계산 된 열 두 개를 정의하고 고유 한 색인을 작성해야합니다.

ALTER TABLE myTable ADD 
    min_pk AS case when col_1 < col_2 then col_1 else col_2 end, 
    max_pk AS case when col_1 > col_2 then col_1 else col_2 end; 

CREATE UNIQUE INDEX idx_unique_pk ON myTable (min_pk, max_pk); 
+0

고맙습니다. – Docu

1

은 내가 조합 'B'와 'A'는 모두 열

Declare @t1 table(col1 varchar(2),col2 varchar(2)) 
insert into @t1 values('A','B') 

if not exists(select col1 from @t1 where ((col1='B' or Col1='A') and (col2='B' or Col2='A'))) 
insert into @t1 values('B','A') 

select * from @t1 

에 존재하거나 제약 조건을 정의 할 수있는 경우 삽입하기 전에 확인할 수 있다고 생각합니다.

고마워. SQL 서버 함수 기반 인덱스를 허용하지 않기 때문에

관련 문제