1

startDateendDate보다 늦지 않도록해야하는 테이블이 있습니다.endDate가 startDate와 같거나 그 이상이어야 함

startDate 또는 endDate (또는 둘 다)을 입력하거나 수정하더라도 규칙을 적용해야하는 날짜를 업데이트 할 수 있습니다.

트리거, 저장 프로 시저 또는 다른 것을 사용하는 것이 더 좋습니까? 모든 샘플 구문이 인정됩니다.

+0

이 항목이 .net, php, coldfusion의 일부인 경우 응용 프로그램 코드를 사용하여 업데이트가 시도되지 않도록 할 수 있습니다. –

+0

@ DanBracuk 그러나 사용자가 응용 프로그램 외부에서 임시 업데이트를 실행하면 어떻게됩니까? 데이터 무결성 로직은 가능한 한 데이터에 가깝습니다. 다른 곳에서는 여분의 로직을 추가하여 이전의 데이터를 캡처 할 수 있지만 데이터가 멀리 떨어져있을수록 효율성이 떨어집니다. –

답변

5

점검 제한 조건을 사용하십시오. 트리거보다 훨씬 간단합니다.

CREATE TABLE dbo.foo 
(
    StartDate DATE NOT NULL, 
    EndDate DATE NOT NULL, 
    CONSTRAINT CheckEndLaterThanStart CHECK (EndDate >= StartDate) 
); 

테이블이 이미 존재하는 경우 : 나중에 종료 날짜보다 시작 날짜를 삽입하려고하면

ALTER TABLE dbo.foo 
    ADD CONSTRAINT CheckEndLaterThanStart 
    CHECK (EndDate >= StartDate); 

, 당신은 얻을 것이다 :

메시지 547, 수준 16 , 상태 0, 줄 1
INSERT 문이 CHECK 제약 조건 인 "CheckEndLaterThanStart"와 충돌했습니다. 데이터베이스 "AdventureWorks2012", 테이블 "dbo.foo"에서 충돌이 발생했습니다.
명세서가 종료되었습니다.

+0

Perfect , 고맙습니다. – user2205507

관련 문제