2017-10-18 2 views
0

나는 방아쇠를 만들었고 누가 그 기록을 삭제했는지 알아내는 방법이 있는지 궁금해하고 있었다.방아쇠를 선택하십시오. 삭제 된 사람 찾기?

트리거 나 USER_NAME() 또는 USER에서 SUSER_NAME()을 사용하면 SQL 로그인 ID 만 얻습니다. 트리거는 사용자 정의 할 수있는 .net 백엔드가있는 다른 소프트웨어에서 활성화됩니다.

USE JM_SB 
GO 

ALTER TRIGGER Sales_Update 
ON Sales 
FOR UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @Action VARCHAR(30) 
    DECLARE @UNAME VARCHAR(30) 

    IF UPDATE(PartGroupID) 
    BEGIN 
      SET @Action = 'Updated Part Group' 

      /* All this does is get dbo */ 
      Set @UNAME = (Select USER From Deleted) 

      INSERT INTO Sales_AuditTrail(Action, SalesID, OldValue, 
      NewValue, SalesDivision, UpdateDate, UpdatedUser) 
      SELECT @Action, i.SalesID, d.PartGroupID, i.PartGroupID, 
      i.SalesDivision, Current_Timestamp As UpdateDate, @UNAME 
      FROM Inserted i 
      INNER JOIN Deleted d ON i.SalesID = d.SalesID 

    END 
END; 
GO 

삭제되거나 삽입 된 테이블에 레코드를 업데이트 한 사람을 알고 있습니까? dbo 또는 sa 대신 ... 업데이트를 실행하는 소프트웨어에서 내 사용자 이름 (예 : "jmadmin")

+2

나는 의심 스럽다. 데이터베이스는 누가 데이터베이스에 로그인했는지 추적합니다. 소프트웨어 시스템 자체가 개별 사용자를 추적 할 수 있습니다. –

+0

나는 그것이 긴 총일 것 같은 느낌이 들었다. 아마도 어쩌면 lol – mrmcg

+0

바라고 있었을 것입니다. 열이 udpate 문의 일부인 경우 UPDATE 함수는 참으로 평가됩니다. 삽입 된 값과 삭제 된 값이 다른지는 평가하지 않습니다. 아마도 UPDATE 함수를 건너 뛰고 i.PartGroupID <> d.PartGroupID를 where의 삽입 술어로 포함시킵니다. –

답변

0

이것은 내가 사용했던 것이며 작동합니다. 모두에게 감사드립니다.

DECLARE @cUserID As varchar(35) 

    SET @cUserID = Upper(Left(App_Name(),20))