2017-10-18 24 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

私はそれがロングショットになると感じました。おそらく笑を期待していた – mrmcg

+0

また、これはあなたが思うものをかなりしないかもしれません。列がudpate文の一部である場合、UPDATE関数は真と評価されます。挿入された値と削除された値が異なるかどうかは評価されません。私はおそらくUPDATE関数をスキップし、i.PartGroupID <> d.PartGroupIDを挿入のための述語としてインクルードします。 –

答えて

0

これは私が使ったもので、動作します。みんな、ありがとう。

DECLARE @cUserID As varchar(35) 

    SET @cUserID = Upper(Left(App_Name(),20)) 
関連する問題