SQL Server 2005의 Nullable 열에 대한 고유 제약 조건


12

이 하나의 프로젝트에서 특정 필드를 고유하게 (문제가 아닙니다!) 설정해야하지만 필드가 null 인 경우 제약 조건을 무시하고 싶습니다. Sql Server 2008에서는 아래와 같이 필터링 된 인덱스를 사용하지만 이전 버전의 SQL에서는 사용할 수 없습니다!

CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC
ON [User] (pinNr)
WHERE UserName IS NOT NULL

그러나 나는 이것이 SQL Server 2005에서 사용할 수 있다고 생각하지 않습니다. 실제로이 블로그 게시물 은 트리거를 사용하여 고유성을 확인하는 해결 방법이 있음을 나타냅니다. 누구든지 이것의 예가 있습니까? 아니면 대안?

불행히도 SQl Server 2008 로의 업그레이드는이 특정 클라이언트에 대한 옵션이 아닙니다 !!

답변:


18

사실, 나는 이런 일을 한 번해야했다. 그렇지 않은 경우 고유 열의 NULL값과 기본 키의 값 (고유 열의 값과 충돌하는 것을 불가능하게하는 다른 논리)을 사용하는 계산 열을 작성하고 고유 색인을 작성하는 것이 포함되었습니다. 그 열. 이에 대한 예제와 트리거 방법을 여기 에서 볼 수 있습니다 .


7

뷰를 만들고 (사용자 이름이 null이 아닌 경우) 뷰에 대해 고유 인덱스를 넣을 수 있습니다. 뷰를 사용할 필요는 없습니다. 뷰에만 존재합니다.

이 기술을 사용하여 일반적으로 불가능한 여러 테이블에서 고유성을 적용 할 수도 있습니다.


2
인덱싱 된 뷰에는 Enterprise Edition이 필요하지 않습니다. 그러나 WITH (NOEXPAND) 쿼리 힌트를 사용하여 Standard Edition 쿼리 최적화 프로그램이 기본 쿼리 대신 인덱스 된 뷰를 사용하도록해야합니다.
예레미아 페 쉬카

3
이 경우 뷰의 유일한 포인트는 고유 제한 조건을 적용하는 것이며 이것이 완벽하게 유효한 / 일반적인 접근법입니다.
Martin Smith

2
필요한 Enterprise Edition에 대한 잘못된 정보를 제거하도록 편집되었습니다.
Meff

여기에 코멘트에 응답하는 시간을내어 주셔서 감사합니다 @Meff - 당신이 사이트에 낯선 사람이되지 바랍니다 : 당신이 관심을 가질만한 이 질문 :)
잭 topanswers.xyz 시도라고
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.