2011-01-13 2 views
1

가능한 중복 : 나는 모두 널 (null)이있는 열을하고 싶은는 SQL 서버에서
SQL Server UNIQUE constraint with duplicate NULLs나는 단지 null 이외의 값에 고유 인덱스를 원하는

실제 가치. 열에 값이 있으면 그 값이 고유하다는 것을 확인하고 싶습니다. 열에는이 열에 대해 null이있는 여러 행이있을 수 있습니다.

Book Number - identity 
Title - varchar 
ISBN - char 

지금 테이블이 좋다 식별 컬럼과 기본 키있을 것입니다 : 예를 들어

내가 즉, 3 열, 책의 테이블을 가지고 가정합니다. 질문은 ISBN 칼럼에 있습니다. 어떤 ISBN 번호도 한 번 이상 표에 나타나기를 원하지 않지만 ISBN 번호가없는 책이 많이 있습니다 (모르기 때문에).

ISBN에서이 제약 조건을 부인하는 방법은 무엇입니까 (또는 최선의 방법입니까)? ISBN이 null 인 경우가 존재 할 때 ISBN하는 계산 된 열 및 기본 키를 생성, 이전 버전의

CREATE UNIQUE INDEX indexName ON tableName(isbn) WHERE isbn IS NOT NULL 

:

SQL Server 2008의
+0

입니다. 아마도 CHECK를 사용할 수 있습니까? – leppie

+0

@astander : 많은 다른 것들을 복제하는 http://stackoverflow.com/questions/191421/how-to-create-a-unique-index-on-a-null-column의 중복 그 자체입니다. 질문에 대답 해 주시겠습니까? :) – Andomar

+0

@Andomar, 그러면 * close-> Duplicate question * –

답변

5

, 당신은 같은 필터링 된 인덱스를 만들 수 있습니다 :

CREATE TABLE tableName (
    pk int identity(1,1) primary key, 
    isbn int NULL, 
    nullbuster as (case when isbn is null then pk else 0 end), 
    CONSTRAINT dupNulls_uqX UNIQUE (isbn) 
) 

SQL Server UNIQUE constraint with duplicate NULLs에서 복사, 그래서 이것은 위키 모드 : 없음이 할 수있는

관련 문제