2013-01-18 3 views
-1

테이블 호출 테스트가 있고 네 개의 필드가 있습니다. 내 레코드가 고유하기를 원하는 테이블에 고유 한 키를 만들어야합니다. 우리는 기록의 이전 버전을 추적하고 = 1 isDeleted를 모두 이전 기록을 표시하지만 문제는, 내 고유 키가 나에게 허용하지 않습니다되어 같은 기록을 두 개 또는 그 이상의 = 1SQL Server 2008의 고유 키 제약

Create table test (ApplicationID int,IsDeleted bit 
        CONSTRAINT test_uck UNIQUE (ApplicationID,IsDeleted)     
       ) 
go 
insert into test values(1,0) 
insert into test values(1,1) 
insert into test values(1,1) 
+1

중복 값을 삽입하는 것처럼 보입니다. 분명 예상대로 작동하고 있습니까? –

답변

1

을 isDeleted를하는이 무엇인지 원하는 :

Create table test (
    ApplicationID int not null, 
    IsDeleted bit not null 
) 
create unique index IX_UniqueApplications on test (ApplicationID) 
    where IsDeleted=0 
go 
insert into test values(1,0) 
insert into test values(1,1) 
insert into test values(1,1) 

Filtered Index이라고합니다. ApplicationIDIsDeleted의 조합이 고유하지 않기를 바랍니다. 삭제되지 않은 경우 ApplicationID을 고유하게 설정하면됩니다. 그것들은 아주 다른 두 가지 개념입니다. 테이블에 버전 번호 필드

vNum int 

를 추가

0

시도는 그 필드를 포함하는 기본 키를 확장합니다.

어쨌든 이전 버전의 레코드를 추적하고 있으므로 해당 레코드의 마지막 버전 번호를 가져 와서 다음 레코드 번호를 하나씩 늘리면됩니다.