有个表数据异常,现在不确定是程序问题还是有人手工修改的表里面的数据,
由于日志文件会定期删除,所以没法看到。、
现在想在一个表上面建个触发器来保存每次对表上某一列的操作。
表A  列F1 int 类型。
当对列F1进行操作的时候把日志插入到另外一个表中。
操作包括增删改 都记录。这个可以实现,现在是想记录 执行这个操作所用的链接的信息。就是想知道操作用户的ip hostname等信息。 不知道这些信息从哪里取啊。

解决方案 »

  1.   

    SQLServer好像没有提供直接的工具,如果2008的话可以借助CDC功能来获取数据变更,但是这个功能获取不了太详细的操作信息,可能还需要做些DML触发器、审计等功能一起使用
      

  2.   


    没想要直接的工具, 是想取 当前执行操作的链接的信息。比如这个链接的客户端ip及hostname
      

  3.   

    http://technet.microsoft.com/zh-cn/library/ms181509(SQL.90).aspx当前连接用户的ip
    SELECT client_net_address  AS IPAddress 
    FROM sys.dm_exec_connections 
    WHERE session_id = @@SPID
      

  4.   


       
            SET NOCOUNT ON ;
            DECLARE @EventData XML = EVENTDATA() ;--返回有关服务器或数据库事件的信息,以XML格式保存。
            DECLARE @ip VARCHAR(32) = ( SELECT  client_net_address
                                        FROM    sys.dm_exec_connections
                                        WHERE   session_id = @@SPID
                                      ) ;        
                    SELECT  @EventData.value('(/EVENT_INSTANCE/EventType)[1]',
                                             'NVARCHAR(100)') ,
                            @EventData.value('(/EVENT_INSTANCE/TSQLCommand)[1]',
                                             'NVARCHAR(MAX)') ,
                            @EventData ,
                            DB_NAME() ,
                            @EventData.value('(/EVENT_INSTANCE/SchemaName)[1]',
                                             'NVARCHAR(255)') ,
                            @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]',
                                             'NVARCHAR(255)') ,
                            HOST_NAME() ,
                            @ip ,
                            PROGRAM_NAME() ,
                            SUSER_SNAME() ;
      

  5.   

    http://www.cnblogs.com/worfdream/articles/2986446.html
      

  6.   

    参考 http://blog.csdn.net/ap0405140/article/details/8896330