다음을 통해 공유


INSTEAD OF UPDATE 트리거

INSTEAD OF UPDATE 트리거를 뷰 또는 테이블에 정의하여 UPDATE 문의 표준 작업을 대신할 수 있습니다. 일반적으로 INSTEAD OF UPDATE 트리거는 뷰에 정의되어 하나 이상의 기본 테이블에 있는 데이터를 수정합니다.

INSTEAD OF UPDATE 트리거가 있는 뷰를 참조하는 UPDATE 문은 SET 절에서 참조하는 Null을 허용하지 않는 모든 뷰 열에 값을 제공해야 합니다. 여기에는 다음과 같이 입력 값을 지정할 수 없는 기본 테이블의 열을 참조하는 뷰 열이 포함됩니다.

  • 기본 테이블의 계산 열
  • IDENTITY INSERT가 OFF로 설정된 기본 테이블의 ID 열
  • timestamp 데이터 형식의 기본 테이블 열

테이블을 참조하는 UPDATE 문에서 계산 열, ID 열 또는 timestamp 열의 값을 설정하려고 하면 오류가 발생하는 경우가 많습니다. 이러한 열의 값은 SQL Server 2005에서 결정해야 하기 때문입니다. 열의 NOT NULL 요구 사항을 충족시키려면 이러한 열이 UPDATE 문에 포함되어야 합니다. 그러나 UPDATE 문이 INSTEAD OF UPDATE 트리거가 있는 뷰를 참조하면 트리거에 정의된 논리가 이러한 열을 무시하므로 오류를 피할 수 있습니다. 이렇게 하려면 INSTEAD OF UPDATE 트리거가 기본 테이블의 해당 열에 대한 값을 업데이트해서는 안 됩니다. 즉 UPDATE 문의 SET 절에 열을 포함하지 않으면 됩니다. 레코드가 inserted 테이블에서 처리될 때는 계산 열, ID 열 또는 timestamp 열에 더미 값을 입력하여 NOT NULL 열의 요구 사항을 충족시킬 수 있지만 INSTEAD OF UPDATE 트리거는 이러한 값을 무시하고 SQL Server는 올바른 값을 설정합니다.

INSTEAD OF UPDATE 트리거가 업데이트되지 않은 inserted 열의 데이터를 처리할 필요가 없기 때문에 이러한 해결 방법은 효과적입니다. INSTEAD OF UPDATE 트리거로 전달된 inserted 테이블에서 SET 절에 지정된 열은 INSTEAD OF INSERT 트리거의 inserted 열에 정의된 것과 동일한 규칙을 따릅니다. SET 절에 지정되지 않은 열의 경우 inserted 테이블에서는 UPDATE 문이 실행되기 전에 있었던 값이 사용됩니다. 트리거는 IF UPDATE(column) 절을 사용하여 특정 열이 업데이트되었는지 여부를 테스트할 수 있습니다. 자세한 내용은 INSTEAD OF INSERT 트리거를 참조하십시오.

INSTEAD OF UPDATE 트리거는 WHERE 절 검색 조건에서만 계산 열, ID 열 또는 timestamp 열에 제공된 값을 사용해야 합니다.

뷰의 INSTEAD OF UPDATE 트리거에서 계산 열, ID 열, timestamp 열 또는 기본 열에 제공된 업데이트된 값을 처리하기 위해 사용하는 논리는 이러한 열 유형에 값을 삽입할 때 적용되는 논리와 동일합니다.

[!참고] UPDATE 작업을 사용하여 정의한 외래 키가 있는 테이블에서는 INSTEAD OF UPDATE 트리거를 정의할 수 없습니다.

참고 항목

개념

INSTEAD OF 트리거 사용

도움말 및 정보

SQL Server 2005 지원 받기