2010-12-20 1 views
3

에 두 행을 일으키는 것입니다. 추적 된 레코드는 감사 테이블 (aAudit)에 삽입됩니다. A에 대한 업데이트를 실행하면 각 업데이트에 대해 감사 테이블에 두 개의 행이 표시됩니다. 이는 예상 한 것이 아닙니다. SQL 업데이트 쿼리는 I SQL Server 2005를 사용하고 아래의 질문이 트리거

ALTER TRIGGER [ATrigger] ON [dbo].[A] 
FOR INSERT, UPDATE, DELETE 
AS 
INSERT INTO [dbo].[aAudit] 
([BusinessDate], [DataTypeId], [BookId], [Version], [DelFlag], [AuditDate], [ExtStatus]) 
SELECT [BusinessDate], [DataTypeId], [BookId], [Version], 'N', getDate(), 0 
FROM inserted 

INSERT INTO [dbo].[aAudit] 
([BusinessDate], [DataTypeId], [BookId], [Version], [DelFlag], [AuditDate], [ExtStatus]) 
SELECT [BusinessDate], [DataTypeId], [BookId], [Version], 'Y', getDate(), 0 
FROM deleted 

왜 위의 트리거가 DelFlag = 'Y' 한 행과 감사 테이블에 DelFalg = 'N' 한 행의 결과입니다 : 여기가 정의한 트리거는?

내 질문에 감사드립니다. 이전 행을 삭제하고 새 행을 삽입으로

크람

장면 뒤에

답변

4

추가 검사를 할 필요가, DELETE, 세 가지 작업을 삽입, 업데이트를 분리하기 위해서 :

ALTER TRIGGER [ATrigger] ON [dbo].[A] 
FOR INSERT, UPDATE, DELETE 
AS 
    -- those are true INSERTs - the (ID) as primary key is *not* present in the "Deleted" table 
    INSERT INTO [dbo].[aAudit]([BusinessDate], [DataTypeId], [BookId], [Version], [DelFlag], [AuditDate], [ExtStatus]) 
     SELECT [BusinessDate], [DataTypeId], [BookId], [Version], 'N', getDate(), 0 
     FROM inserted 
     WHERE (id) NOT IN (SELECT DISTINCT (id) FROM DELETED) 

    -- those are true DELETEs - the (ID) as primary key is *not* present in the "Inserted" table 
    INSERT INTO [dbo].[aAudit]([BusinessDate], [DataTypeId], [BookId], [Version], [DelFlag], [AuditDate], [ExtStatus]) 
     SELECT [BusinessDate], [DataTypeId], [BookId], [Version], 'Y', getDate(), 0 
     FROM deleted 
     WHERE (id) NOT IN (SELECT DISTINCT (id) FROM INSERTED) 

    -- those are the UPDATEs - the (ID) as primary key is present in both the "Inserted" and "Deleted" table 
    INSERT INTO [dbo].[aAudit]([BusinessDate], [DataTypeId], [BookId], [Version], [DelFlag], [AuditDate], [ExtStatus]) 
     SELECT [BusinessDate], [DataTypeId], [BookId], [Version], 'N', getDate(), 0 
     FROM Inserted i 
     INNER JOIN Deleted d on i.ID = d.ID 
+0

많은 문제는 해결되었습니다 :) – Vikram

+0

@Vikram - 동의해야합니다 (확인란을 클릭하십시오) 그 때 대답. 이렇게하면 사람들이 귀하를 도우 려하며 어떤 답이 문제를 해결했는지 다른 사람들에게 알릴 수 있습니다 – JNK

6

는 갱신 사항 처리됩니다. 따라서 업데이트를 수행하면 INSERTED 및 DELETED 레코드 세트에 모두 데이터가 포함됩니다.

그래서 두 행이 UPDATE 문에서 감사 테이블로 들어갑니다.

+0

+1에 자리 - 업데이트가 그 경우 콤보 동작 –

+0

/삭제는 INSERT로 처리됩니다 그 사건을 처리하는 방법은 뭔가? 모든 삽입/업데이트가 감사 테이블에 "삭제되지 않음"으로 표시되고 삭제 된 행이 "삭제됨"으로 표시되기를 바랍니다. – Vikram

+0

@Vikram : 네, 할 수 있습니다 - 방아쇠를 한 번 더 확인해야합니다 - 자세한 내용은 내 응답을 참조하십시오 –

관련 문제