2016-10-26 2 views
0

열의 제약 조건을 만들고 싶지만 데이터의 일부분에 대해서만 제약 조건을 만들려고합니다.열에 제약 조건을 만들지 만 데이터의 일부에만 적용하십시오.

상황은 다음과 같습니다. 우리는 모든 드롭 다운에 대한 모든 값을 하나의 테이블에 가지고 있습니다. 이들을 분리하기 위해 우리는 dropdowntype이라는 판별자를 가지고 있습니다.

이제 제약 조건을 만들고 싶지만 dropdowntype을 고려해야합니다.

제약 조건은 다음과 같습니다. dropdowns는 기본값을 가질 수 있습니다. dropdowntype 당 0 또는 하나의 레코드 만 허용되며 isdefault의 값은 true입니다.

따라서 isdefault의 값이 true 인 레코드가 여러 개있을 수 있지만 모두 dropdowntype에 대해 다른 값을 가져야합니다.

EDIT : 값이 false 인 주어진 dropdowntype에는 여러 값이 허용됩니다.

이 작업을 수행 할 수 있습니까?

(보너스로 다른 nullable 열에 제약 조건을 넣고 해당 열의 모든 값이 null이거나 해당 값이 다시 주어진 값인 dropdowntype 인 경우입니다.하지만 첫 번째 질문이 대답 나는이 하나를 자신을 수행하는 방법을 알아낼거야)

테이블 :.

CREATE TABLE [dbo].[DropDownValues](

    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](100) NOT NULL, 
    [CreateDate] [datetime] NOT NULL, 
    [IsActive] [bit] NOT NULL, 
    [IsDefaultValue] [bit] NOT NULL, 
    [Description] [nvarchar](1000) NULL, 
    [IsOtherItem] [bit] NOT NULL, 
    [Dropdowntype] [tinyint] NOT NULL, 
CONSTRAINT [PK_ddv] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
+1

아마도 필터링 된 고유 색인 :'DropDownValues ​​(dropdowntype)에 고유 색인 작성 위치 IsDefaultValue = true ' –

+0

문제점이 아직 해결되지 않았습니까? –

+0

@TT. 나는 그것에 대해 연구 중이다. 나는 코멘트에있는 코드가 원하는 결과를 가지지 않을 것이라고 생각하여 질문을 편집했습니다. 나는 그것이 효과가 있다고 생각하지만, 나는 MS Sql이 문서가 왜 작동하는지 이해할 수없는 것 같습니다 ... – Michel

답변

2

질문 1에 대답하기 위해, 당신은 dropdowntypeisdefault의 화합물 고유 키를 원한다. 의사 코드 :

CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notnull 
ON YourTable(dropdowntype, isdefault) 
WHERE isdefault IS NOT NULL; 

질문의 두 번째 부분에 대해서도 동일한 작업을 수행 할 수 있습니다. 이 키는 입니다. isDefault IS NOT NULL 인 경우, ths는 널 (NULL) 입력 가능 컬럼에 고유 제한 조건을 작성할 수있게합니다.

+0

고마워,이 작품. 구문에 대해 머리 숙여지기까지는 어느 정도 시간이 걸렸습니다. – Michel

관련 문제