2017-10-18 76 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))