SQL Server에서 조건부 고유 제약 조건 구현
SQL Server의 고유 제약 조건은 지정된 열 전체에 항목이 중복되는 것을 방지합니다. 하지만 특정 조건에서만 고유성을 어떻게 적용합니까? 해결책은 필터링된 인덱스를 활용하는 것입니다.
SQL Server 설명서에 따르면 필터링된 인덱스는 필터 조건자에 의해 정의된 테이블 행의 하위 집합만 인덱싱하는 비클러스터형 인덱스입니다.
이 기능을 사용하면 고유한 인덱스와 조건부 필터를 결합하여 선택적으로 고유성을 적용할 수 있습니다. 테이블을 고려해보세요:
<code class="language-sql">Table(ID, Name, RecordStatus)</code>
여기서 RecordStatus
은 1(활성) 또는 2(삭제)일 수 있습니다. ID
가 1인 경우에만 고유한 RecordStatus
값을 보장하려면 필터링된 인덱스를 생성합니다.
<code class="language-sql">CREATE UNIQUE INDEX MyIndex ON MyTable(ID) WHERE RecordStatus = 1;</code>
이것은 활성 레코드(여기서 ID
)에 대해서만 RecordStatus = 1
에 고유성을 적용합니다. ID
와 함께 중복된 RecordStatus = 1
을 삽입하려고 하면 오류가 발생합니다.
<code>Cannot insert duplicate key row in object 'MyTable' with unique index 'MyIndex'. The duplicate key value is (9999).</code>
필터링된 인덱스가 SQL Server 2008에 도입되었다는 점을 기억하는 것이 중요합니다. 이전 버전(예: SQL Server 2005)의 경우 조건부 고유성을 달성하려면 트리거와 같은 대체 접근 방식이 필요합니다.
위 내용은 SQL Server에서 조건부 고유성을 어떻게 적용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!