2017-10-18 75 views
0

我創建了一個觸發,我想知道的,如果有一種方法來找出誰做了記錄的刪除?觸發器從刪除選擇..找到誰刪除?

當我使用SUSER_NAME()在觸發或者USER_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

我有一種感覺,這將是一個長鏡頭。希望可能是大聲笑 – mrmcg

+0

此外,這可能不會完全符合你的想法。如果該列是udpate語句的一部分,則UPDATE函數的計算結果爲true。它不評估插入和刪除的值是否不同。我可能會跳過UPDATE函數並將i.PartGroupID <> d.PartGroupID作爲插入的Where謂詞。 –

回答

0

這是我使用和它的作品。感謝大家。

DECLARE @cUserID As varchar(35) 

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