CHECK 제약 조건 만들기 및 수정
테이블을 만들 때 테이블 정의의 일부로 CHECK 제약 조건을 만들 수 있습니다. 이미 테이블이 있으면 CHECK 제약 조건을 추가할 수 있습니다. 테이블 및 열에서 여러 개의 CHECK 제약 조건을 사용할 수 있습니다.
이미 CHECK 제약 조건이 있으면 해당 제약 조건을 수정하거나 삭제할 수 있습니다. 예를 들어 테이블의 열에서 CHECK 제약 조건이 사용하는 식을 수정할 수 있습니다.
[!참고]
CHECK 제약 조건을 수정하려면 먼저 기존 CHECK 제약 조건을 삭제하고 새로운 정의를 사용하여 다시 만들어야 합니다.
다음 Transact-SQL 예에서는 새 테이블을 만든 다음, CHECK 제약 조건을 CreditRating 열에 추가하여 테이블을 수정합니다.
IF OBJECT_ID ('dbo.Vendors', 'U') IS NOT NULL
DROP TABLE dbo.Vendors;
GO
CREATE TABLE dbo.Vendors
(VendorID int PRIMARY KEY, VendorName nvarchar (50),
CreditRating tinyint)
GO
ALTER TABLE dbo.Vendors ADD CONSTRAINT CK_Vendor_CreditRating
CHECK (CreditRating >= 1 AND CreditRating <= 5)
CHECK 제약 조건을 삭제하면 제약 조건 식에 포함된 열에서 사용할 수 있는 데이터 값에 대한 제한 사항이 제거됩니다.
테이블을 만들 때 CHECK 제약 조건을 만들려면
기존 테이블에 CHECK 제약 조건을 만들려면
CHECK 제약 조건을 삭제하려면
WITH NOCHECK를 사용하여 CHECK 제약 조건 강제 적용
기존 테이블에 추가한 CHECK 제약 조건이 새 데이터에만 적용되거나 새 데이터와 기존 데이터에 모두 적용되게 할 수 있습니다. 기본적으로 CHECK 제약 조건은 새 데이터와 기존 데이터에 모두 적용됩니다. ALTER TABLE 문의 WITH NOCHECK 옵션을 사용하여 새 제약 조건을 새로 추가된 데이터에만 적용할 수 있습니다. 이 옵션은 기존 데이터가 새 CHECK 제약 조건을 이미 만족하거나 비즈니스 규칙에 따라 앞으로만 새 제약 조건을 적용해야 할 때 유용합니다.
예를 들어 기존 제약 조건에서는 우편 번호를 5자리로 제한하지만 새 제약 조건은 9자리 우편 번호를 필요로 할 수 있습니다. 5자리 우편 번호가 있는 기존 데이터는 아직도 유효하며 9자리 우편 번호가 있는 새 데이터와 함께 존재하게 됩니다. 이런 경우는 새 제약 조건이 새 데이터에만 적용되도록 해야 합니다.
그러나 기존 데이터를 검사하지 않고 제약 조건을 추가할 때는 데이터베이스 엔진에서 테이블의 무결성 규칙을 강제 적용하지 않으므로 주의해야 합니다.
CHECK 제약 조건을 만들 때 기존 데이터를 검사하지 않으려면
CHECK 제약 조건 비활성화
INSERT 작업, UPDATE 작업 및 복제 처리와 같은 특정 작업에 대해 기존 CHECK 제약 조건을 비활성화할 수 있습니다.
INSERT 및 UPDATE 문
CHECK 제약 조건을 비활성화하면 제약 조건의 유효성 검사 없이 테이블의 데이터를 수정할 수 있습니다. 새 데이터가 제약 조건을 위반하거나 이미 데이터베이스에 있는 데이터에만 제약 조건을 적용해야 하면 INSERT 및 UPDATE 문에서 CHECK 제약 조건을 비활성화하십시오.
복제 처리
제약 조건이 원본 데이터베이스에만 적용되면 복제 시 CHECK 제약 조건을 비활성화하십시오. 테이블을 복제하면 원본 데이터베이스의 테이블 정의와 데이터가 대상 데이터베이스로 복사됩니다. 두 데이터베이스는 대개 다른 서버에 있습니다. 원본 데이터베이스에만 적용되는 CHECK 제약 조건을 비활성화하지 않으면 대상 데이터베이스에 새 데이터가 들어가지 않을 수 있습니다. 자세한 내용은 NOT FOR REPLICATION으로 제약 조건, ID 및 트리거 제어를 참조하십시오.
INSERT 및 UPDATE 문에 대해 CHECK 제약 조건을 비활성화하려면
복제 시 CHECK 제약 조건을 비활성화하려면
CHECK 제약 조건에 대한 정보를 얻으려면