想写一个触发器,当一个表的某一个字段被UPDATE或DELETE时,记录下执行这个UPDATE语句的机器、执行工具和时间等,请问怎么写?谢谢。
    注:希望这个触发器在UPDATE这个表的指定字段时记录下来。

解决方案 »

  1.   


    create trigger tr_test on tb 
    after update,delete
    asif update(col)  --如果更新字段是col则...否则不执行
    begin
        insert into tb_log (......)  --记录表
        select @@version,getdate()  --,...
    end    insert into tb_log (......)  --记录表
        select @@version,getdate()  --,...
        from deleted
      

  2.   

    这个需要自己写程序记录吧。数据库获取不到当前执行sql的机器名。
      

  3.   

    记录下执行这个UPDATE语句的机器、执行工具和时间执行工具,机器名都取不到  需要程序来做
      

  4.   

    取不到当前UPdate的工具和机器名
      

  5.   

    可以的,在触发器里,如下代码可以查看机器名及客户端程序名.  declare @machine varchar(50),@program varchar(1000)
      print 'SPID: '+cast(@@spid as varchar)
      select @machine=host_name,@program=program_name from sys.dm_exec_sessions 
        where session_id=@@SPID
      print 'machine: '+@machine
      print 'program: '+@program
      

  6.   

    以下摘自hAIWER的[url=http://blog.csdn.net/haiwer/article/details/3016270]日志类触发器[/url--进程信息  DECLARE @USERID   VARCHAR(128),                 --连接的时候使用的哪个SQL登陆用户                @HOSTNAME   VARCHAR(128),                       --客户端的机器名                                  @LOGINID   VARCHAR(128),                 --客户端的登陆用户(OS的用户)          @APPNAME   VARCHAR(128)            --是从查询分析器,还是应用程序来执行的                    SELECT        @USERID     =LOGINAME,                        --连接的时候使用的哪个SQL登陆用户                @HOSTNAME       =HOSTNAME,                       --客户端的机器名                                  @LOGINID            =NT_USERNAME,                            --客户端的登陆用户(OS的用户)          @APPNAME          =PROGRAM_NAME      --是从查询分析器,还是应用程序来执行的                   FROM MASTER..SYSPROCESSES  WHERE SPID=@@SPID