다음을 통해 공유


DML 트리거 만들기

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric의 SQL 데이터베이스

이 문서에서는 SQL Server Management Studio 또는 Transact-SQL 문을 사용하여 Transact-SQL DML(데이터 조작 언어) 트리거를 CREATE TRIGGER 만드는 방법을 설명합니다.

이 문서의 코드 샘플은 AdventureWorks2025 또는 AdventureWorksDW2025 샘플 데이터베이스를 사용합니다. 이 데이터베이스는 Microsoft SQL Server 샘플 및 커뮤니티 프로젝트 홈페이지에서 다운로드할 수 있습니다.

제한점

DML 트리거 만들기와 관련된 제한 사항 목록은 CREATE TRIGGER를 참조하세요.

사용 권한

트리거가 ALTER 생성되는 테이블 또는 뷰에 대한 권한이 필요합니다.

DML 트리거를 만드는 방법

다음 방법 중 하나를 사용할 수 있습니다.

SQL Server Management Studio 사용

  1. 개체 탐색기에서 데이터베이스 엔진 의 인스턴스에 연결한 다음 해당 인스턴스를 확장합니다.

  2. 데이터베이스를 확장하고, 데이터베이스를 AdventureWorks2025 확장하고, 테이블을 확장한 다음, 테이블을 Purchasing.PurchaseOrderHeader확장합니다.

  3. 트리거를 마우스 오른쪽 단추로 클릭한 다음 새 트리거를 선택합니다.

  4. 쿼리 메뉴에서 템플릿 매개 변수 값 지정을 선택합니다. 또는 (Ctrl-Shift-M) 키를 눌러 템플릿 매개 변수 값 지정 대화 상자를 열 수 있습니다.

  5. 템플릿 매개 변수 값 지정 대화 상자에 표시된 매개 변수에 대해 다음 값을 입력합니다.

    매개 변수 가치
    만든 이 사용자 이름
    날짜 만들기 오늘 날짜
    설명 공급업체와의 새 구매 주문을 삽입할 수 있도록 허용하기 전에 공급업체 신용 등급을 확인합니다.
    Schema_Name Purchasing
    Trigger_Name NewPODetail2
    Table_Name PurchaseOrderDetail
    Data_Modification_Statement 목록에서 제거 및 UPDATE 제거 DELETE 합니다.
  6. 확인을 선택합니다.

  7. 쿼리 편집기에서 -- 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;
    
  8. 구문이 유효한지 확인하려면 쿼리 메뉴에서 구문 분석을 선택합니다. 오류 메시지가 반환되면 문을 이전 코드 블록과 비교하고 필요에 따라 수정한 다음 이 단계를 반복합니다.

  9. DML 트리거를 만들려면 쿼리 메뉴에서 실행을 선택합니다. DML 트리거가 데이터베이스에 개체로 만들어집니다.

  10. 개체 탐색기에 나열된 DML 트리거를 보려면 트리거 를 마우스 오른쪽 단추로 클릭하고 새로 고침을 선택합니다.

Transact-SQL 사용

  1. 개체 탐색기에서 데이터베이스 엔진 의 인스턴스에 연결한 다음 해당 인스턴스를 확장합니다.

  2. 파일 메뉴에서 새 쿼리를 선택합니다.

  3. 다음 예시를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다. 이 예제에서는 이전과 동일한 저장된 DML 트리거를 만듭니다. 트리거는 다중 행 및 단일 행 삽입에 유효하며 단일 행 삽입에 최적입니다.

    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;