如题,有一sql server用户对某一表做了一些操作,导致触发了触发器,现在想找到是哪个sql server用户操作导致触发器的执行。

解决方案 »

  1.   

    有什么办法可以查出来吗?sql server 的日志中可以查出来sql server用户的操作记录吗?
      

  2.   

    不是所有表,是某一个具体的表。对这个表定义了一个触发器。
    现在想查出是哪个sql server用户对这个表操作导致触发了触发器。
      

  3.   

    在触发器里查询 spidselect @@spid
      

  4.   

    In your trigger, you can reference user_name() function.
      

  5.   

    There are also suser(), suser_name() functions.
      

  6.   

    赞同此方案,但好像是  SUSER_SNAME() 这个函数,user_name() 我在SQL2008下显示的是dbo(架构名)
      

  7.   

    SYSTEM_USER 是登录名,USER是架构名。可以在触发器中增加日志功能。create TRIGGER [dbo].[trigger_T_Test] 
       ON  [dbo].[T_Test] 
       AFTER INSERT,DELETE,UPDATE
    AS 
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;    -- Insert statements for trigger here
    if Update([Name])
    begin
    update T_TestDetails set Name=i.Name
    from T_TestDetails t1, Deleted d, Inserted i 
    where t1.Name = d.Name

    print 'T_Test operate!---' + system_user+'---'+user 
       ----记录下 
               INSERT INTO [TestDB].[dbo].[T_OperateLog]
               ([SYSTEMUSER]
               ,[USER]
               ,[CreateTime])
    VALUES
               (system_user
               ,user
               ,getdate())
    end
    END