2011-12-13 2 views
1

테이블 A라는 테이블이 있으며 INSERT, UPDATES, DELETES를 처리하는 트리거를 만들었습니다. 이제 다음 단계를 처리하기 위해 어떤 DML 작업이 수행되었는지 알고 싶습니다. 업데이트/삽입/삭제 여부를 어떻게 알 수 있습니까?업데이트/삽입/삭제가 테이블에서 발생했는지 확인하는 방법

의견, 의견을 보내 주시면 대단히 감사하겠습니다.

+0

아니면 가능한 솔루션의 모든 이벤트 – Magnus

+0

에 대한 하나의 트리거를 만들 수 있습니다. 한 번에 모든 것을 할 수있는 곳이 있는지 궁금합니다. 가장 좋은 방법은 무엇입니까 ?? – SaiBand

답변

2

트리거 내부에는 INSERTEDDELETED의 두 가지 특수 테이블이 있습니다. 행이 INSERTED 테이블에만 존재하는 경우 INSERT 조작이 발생했습니다. 마 y 가지로 행이 DELETED 테이블에만 존재하는 경우, DELETE 조작이 발생했습니다. 두 테이블에 행이 있으면 UPDATE가 발생하고 INSERTED 테이블은 새 값을 보유하고 DELETED 테이블은 이전 값을 보유합니다.

삽입 된 행 :

SELECT i.* 
    FROM INSERTED i 
     LEFT JOIN DELETED d 
      ON i.PrimaryKey = d.PrimaryKey 
    WHERE d.PrimaryKey IS NULL 

삭제 된 행 :

SELECT d.* 
    FROM DELETED d 
     LEFT JOIN INSERTED i 
      ON d.PrimaryKey = i.PrimaryKey 
    WHERE i.PrimaryKey IS NULL 

갱신 된 행 :

SELECT * 
    FROM INSERTED i 
     INNER JOIN DELETED d 
      ON i.PrimaryKey = d.PrimaryKey 
+0

답변 해 주신 Joe에게 감사드립니다. 그러나 트리거를 컴파일하려고 할 때 오류 메시지가 나타납니다. PrimaryKey – SaiBand

+1

@SaiBand :'PrimaryKey'는 필자의 예제에서 만든 열 이름입니다. 테이블에서 실제 기본 키 열의 이름으로 대체해야합니다. –

+0

감사! 기본 키를 테이블의 실제 키로 대체 한 후 작동합니다. 건배! – SaiBand

관련 문제