DML 트리거 만들기
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
이 항목에서는 SQL Server Management Studio를 사용하거나 Transact-SQL CREATE TRIGGER 문을 사용하여 Transact-SQL DML 트리거를 만드는 방법에 대해 설명합니다.
시작하기 전에
제한 사항
DML 트리거 만들기와 관련된 제한 사항 목록은 CREATE TRIGGER(Transact-SQL)를 참조하세요.
사용 권한
트리거를 생성할 테이블 또는 뷰에 대한 ALTER 권한이 필요합니다.
DML 트리거를 만드는 방법
다음 중 하나를 사용할 수 있습니다.
SQL Server Management Studio 사용
개체 탐색기에서 데이터베이스 엔진 의 인스턴스에 연결한 다음 해당 인스턴스를 확장합니다.
데이터베이스,
AdventureWorks2022
데이터베이스, 테이블 및 Purchasing.PurchaseOrderHeader테이블을 차례로 확장합니다.트리거를 마우스 오른쪽 단추로 클릭한 다음 새 트리거를 선택합니다.
쿼리 메뉴에서 템플릿 매개 변수 값 지정을 클릭합니다. 또는 (Ctrl-Shift-M) 키를 눌러 템플릿 매개 변수 값 지정 대화 상자를 열 수 있습니다.
템플릿 매개 변수 값 지정 대화 상자에 표시된 매개 변수에 대해 다음 값을 입력합니다.
매개 변수 값 작성자 Your name 만든 날짜 Today's date 설명 공급업체와의 새 구매 주문을 삽입할 수 있도록 허용하기 전에 공급업체 신용 등급을 확인합니다. Schema_Name 구매 Trigger_Name NewPODetail2 Table_Name PurchaseOrderDetail Data_Modification_Statement 목록에서 UPDATE 및 DELETE를 제거합니다. 확인을 클릭합니다.
쿼리 편집기에서
-- Insert statements for trigger here
주석을 다음 문으로 바꿉니다.IF @@ROWCOUNT = 1 BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + LineTotal FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID END ELSE BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + (SELECT SUM(LineTotal) FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID) WHERE PurchaseOrderHeader.PurchaseOrderID IN (SELECT PurchaseOrderID FROM inserted) END;
구문이 유효한지 확인하려면 쿼리 메뉴에서 구문 분석을 클릭합니다. 오류 메시지가 반환되면 위의 정보와 문을 비교하여 필요에 따라 수정하고 이 단계를 반복합니다.
DML 트리거를 만들려면 쿼리 메뉴에서 실행을 클릭합니다. DML 트리거가 데이터베이스에 개체로 만들어집니다.
개체 탐색기에 나열된 DML 트리거를 보려면 트리거 를 마우스 오른쪽 단추로 클릭하고 새로 고침을 선택합니다.
Transact-SQL 사용
개체 탐색기에서 데이터베이스 엔진 의 인스턴스에 연결한 다음 해당 인스턴스를 확장합니다.
메뉴에서 파일 메뉴에서 새 쿼리를 클릭합니다.
다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다. 이 예시에서는 위와 동일한 저장된 DML 트리거를 만듭니다.
-- Trigger valid for multirow and single row inserts -- and optimal for single row inserts. USE AdventureWorks2022; GO CREATE TRIGGER NewPODetail3 ON Purchasing.PurchaseOrderDetail FOR INSERT AS IF @@ROWCOUNT = 1 BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + LineTotal FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID END ELSE BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + (SELECT SUM(LineTotal) FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID) WHERE PurchaseOrderHeader.PurchaseOrderID IN (SELECT PurchaseOrderID FROM inserted) END;