sql 트리거 예제

Postato il 2 Ago 2019 in Senza categoria

아래 테이블 결과와 같이 오류 메시지를 발생시킨 후 AFTER UPDATE 트리거가 전체 트랜잭션을 롤백하므로 Emp_Salary 값이 변경되지 않은 것을 볼 수 있습니다. word는 트리거가 테이블을 쿼리하거나 초기 변경 사항이 적용되고 테이블이 일관된 상태로 돌아온 후에만 테이블을 다시 변경할 수 있기 때문입니다. SQL Server를 사용하면 테이블이나 뷰에서 대신 트리거를 통해 텍스트, ntext 또는 이미지 열을 업데이트할 수 있습니다. 복제 에이전트가 트리거에 관련된 테이블을 수정할 때 트리거를 실행해서는 안 됩니다. INSERT 작업을 추적하기 위해 상위 테이블에서 INSERT 작업을 수행한 후 발생되는 DML 트리거를 만듭니다. 이 트리거는 아래의 CREATE TRIGGER T-SQL 문에서와 같이 가상 삽입 된 테이블에서 마지막으로 삽입 된 ID 값을 해당 상위 테이블에 검색합니다. 프로덕션.제품 테이블에서 삭제됩니다. 삽입 데이터는 UNION ALL 연산자: 트리거: 트리거를 통해 INSERTED 및 DELETED 테이블에서 공급되며, 트리거는 데이터베이스의 특수 이벤트가 발생할 때마다 자동으로 호출되는 데이터베이스의 저장 프로시저입니다. 예를 들어 행이 지정된 테이블에 삽입되거나 특정 테이블 열이 업데이트될 때 트리거를 호출할 수 있습니다.

다음 예제에서는 간접 및 직접 트리거 재귀 를 모두 사용 하 여 두 개의 업데이트 트리거 TR1 및 TR2 테이블 T1에 정의 되어 있다고 가정 합니다. 트리거 TR1 업데이트 테이블 T1 재귀. UPDATE 문은 각 TR1 및 TR2를 한 번 실행합니다. 또한 TR1의 시작은 TR1(재귀적으로) 및 TR2의 실행을 트리거합니다. 특정 트리거에 대해 삽입및 삭제된 테이블에는 트리거를 호출한 UPDATE 문에만 해당하는 행이 포함됩니다. DML 트리거와 달리 DDL 트리거는 스키마로 범위가 정해지지 않습니다. 따라서 DDL 트리거에 대한 메타데이터를 쿼리하기 위해 OBJECT_ID, OBJECT_NAME, OBJECTPROPERTYEX 및 OBJECTPROPERTYEX와 같은 함수를 사용할 수 없습니다. 대신 카탈로그 뷰를 사용합니다.

자세한 내용은 DDL 트리거에 대한 정보 얻기를 참조하십시오. 트리거가 발생하면 저장된 프로시저와 마찬가지로 결과가 호출 응용 프로그램에 반환됩니다. 트리거 발생으로 인해 결과가 응용 프로그램에 반환되는 것을 방지하려면 결과를 반환하는 SELECT 문이나 트리거에서 변수 할당을 수행하는 문을 포함하지 마십시오. 사용자에게 결과를 반환하는 SELECT 문 또는 변수 할당을 수행하는 문이 포함된 트리거에는 특별한 처리가 필요합니다. 트리거 테이블에 대한 수정이 허용되는 모든 응용 프로그램에 반환된 결과를 작성해야 합니다. 트리거에서 변수 할당이 발생해야 하는 경우 트리거 시작 시 SET NOCOUNT 문을 사용하여 결과 집합이 반환되지 않도록 합니다. 결과에서 상위 테이블에서 ID 값이 1인 레코드의 Emp_Salary 값이 변경되지 않고 업데이트 작업의 로그가 상위에 UPDATE 대신 트리거가 있기 때문에 대체 테이블에 삽입됩니다. 아래 결과에 표시된 대로 표: sp_settriggerorder를 사용하여 테이블에서 실행할 첫 번째 및 마지막 AFTER 트리거를 지정할 수 있습니다. 테이블에서 각 INSERT, UPDATE 및 DELETE 작업에 대해 첫 번째 트리거와 마지막 AFTER 트리거를 하나만 지정할 수 있습니다.

동일한 테이블에 다른 AFTER 트리거가 있는 경우 임의로 실행됩니다. 이 트리거에서 삭제된 레코드의 데이터는 논리적으로 삭제된 테이블에서 선택되어 감사 테이블에 삽입됩니다. 메인 테이블에서 삭제를 발생시도록 하겠습니다. SQL Server는 ALTER DATABASE를 사용하여 RECURSIVE_TRIGGERS 설정을 사용할 때 트리거의 재귀 호출도 지원합니다. 이러한 트리거는 테이블에 삽입, 업데이트 또는 삭제한 후에 실행됩니다. 뷰에는 지원되지 않습니다. AFTER TRIGGERS는 schema_name DML 트리거가 속한 스키마의 이름으로 세 가지 유형으로 더 분류할 수 있습니다.