有个表数据异常,现在不确定是程序问题还是有人手工修改的表里面的数据,
由于日志文件会定期删除,所以没法看到。、
现在想在一个表上面建个触发器来保存每次对表上某一列的操作。
表A 列F1 int 类型。
当对列F1进行操作的时候把日志插入到另外一个表中。
操作包括增删改 都记录。这个可以实现,现在是想记录 执行这个操作所用的链接的信息。就是想知道操作用户的ip hostname等信息。 不知道这些信息从哪里取啊。
由于日志文件会定期删除,所以没法看到。、
现在想在一个表上面建个触发器来保存每次对表上某一列的操作。
表A 列F1 int 类型。
当对列F1进行操作的时候把日志插入到另外一个表中。
操作包括增删改 都记录。这个可以实现,现在是想记录 执行这个操作所用的链接的信息。就是想知道操作用户的ip hostname等信息。 不知道这些信息从哪里取啊。
没想要直接的工具, 是想取 当前执行操作的链接的信息。比如这个链接的客户端ip及hostname
SELECT client_net_address AS IPAddress
FROM sys.dm_exec_connections
WHERE session_id = @@SPID
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() ;