AdventureWorks 예제 데이터베이스의 DML 트리거
이 항목에서는 AdventureWorks 예제 데이터베이스에 포함되어 있는 여러 가지 DML 트리거 예제에 대해 설명합니다. 이러한 DML 트리거는 Adventure Works Cycles의 비즈니스 규칙을 강제 적용하고 해당 데이터의 무결성을 보호할 수 있도록 합니다.
SQL Server Management Studio에서 각 트리거의 텍스트를 보려면
개체 탐색기에서 트리거가 정의되어 있는 테이블을 찾은 다음 트리거 폴더를 확장합니다.
원하는 트리거를 마우스 오른쪽 단추로 클릭한 다음 트리거 스크립팅을 클릭합니다.
업데이트 후 필드 설정
uSalesOrderHeader DML 트리거
Sales.SalesOrderHeader 테이블에는 Status 필드를 제외하고 특정 행이 업데이트된 횟수를 반영하는 RevisionNumber 열이 있습니다. DML 트리거 uSalesOrderHeader는 업데이트 후 RevisionNumber 필드를 1씩 늘리거나 Null인 경우 1로 설정합니다.
uPurchaseOrderHeader DML 트리거는 uSalesOrderHeader DML 트리거가 Sales.SalesOrderHeader 테이블에서 수행하는 것과 같은 동작을 Purchasing.PurchaseOrderHeader 테이블에 대해 수행합니다.
삽입 후 테이블을 채운 다음 다른 테이블에서 필드 설정
iPurchaseOrderDetail 및 uPurchaseOrderHeader DML 트리거
PurchaseOrderDetail 테이블에 데이터가 삽입되면 DML 트리거 iPurchaseOrderDetail은 삽입된 데이터의 일부를 Production.TransactionHistory 테이블에도 삽입합니다. PurchaseOrderDetail에서 여러 줄로 이루어진 항목이 PurchaseOrderHeader 테이블에서 하나의 구매 주문을 구성하므로 PurchaseOrderDetail에 삽입이 이루어질 때 PurchaseOrderHeader의 Subtotal 필드가 업데이트되어야 합니다. iPurchaseOrderDetail 트리거는 특정 판매 주문에 대해 PurchaseOrderDetail의 LineTotal 필드를 집계하고 해당 집계를 사용하여 PurchaseOrderHeader의 Subtotal 필드를 설정합니다.
DML 트리거가 Purchasing.PurchaseOrderHeader에서 업데이트를 수행하면 이 동작으로 인해 Purchasing.PurchaseOrderHeader 테이블에 있는 uPurchaseOrderHeader 업데이트 트리거가 시작됩니다. 다른 트리거가 시작되도록 하는 트리거에 대한 자세한 내용은 중첩 트리거 사용을 참조하십시오.
DML 트리거 uPurchaseOrderDetail은 iPurchaseOrderDetail이 수행하는 것과 같은 동작을 TransactionHistory 및 PurchaseOrderHeader 테이블에 대해 수행하지만 삽입을 받을 때 대신 PurchaseOrderDetail 테이블이 업데이트될 때 해당 작업을 수행합니다.
Production.WorkOrder 테이블의 DML 트리거 iWorkOrder 및 uWorkOrder는 TransactionHistory 테이블에 대해서만 데이터를 삽입합니다.