测试表
create table tbTest1( a int , b varchar ( 10 ) ) go -- 触发器 create trigger tr_tbTest1 on tbTest1 for insert , delete , update as -- RowCnt declare @Rows int set @Rows = @@rowcount set nocount on -- Sql create table #t ( EventType varchar ( 20 ), Parameters int , EventInfo varchar ( 300 ) ) declare @spid varchar ( 20 ) set @spid = cast ( @@spid as varchar ) insert #t exec ( ' DBCC INPUTBUFFER ( ' + @spid + ' ) ' ) -- OpType declare @OpType int set @OpType = 2 -- update if not exists ( select 1 from inserted) set @OpType = 3 -- delete if not exists ( select 1 from deleted) set @OpType = 1 -- insert -- 进程信息 declare @UserId varchar ( 50 ), -- 连接的时候使用的哪个Sql登陆用户 @HostName varchar ( 50 ), -- 客户端的机器名 @LoginId varchar ( 50 ), -- 客户端的登陆用户(OS的用户) @AppName varchar ( 50 ) -- 是从查询分析器,还是应用程序来执行的 select @UserId = loginame, -- 连接的时候使用的哪个Sql登陆用户 @HostName = hostname, -- 客户端的机器名 @LoginId = nt_username, -- 客户端的登陆用户(OS的用户) @AppName = program_name -- 是从查询分析器,还是应用程序来执行的 from master..sysprocesses where spid = @@spid if exists ( select * from dbo.sysobjects where id = object_id (N ' [tbLog1] ' ) and OBJECTPROPERTY (id, N ' IsUserTable ' ) = 1 ) insert tbLog1 select EvTime = getdate (), -- 访问时间 Sql = t.EventInfo, -- 执行的Sql语句 UserId = @UserId , -- 连接的时候使用的哪个Sql登陆用户 HostName = @HostName , -- 客户端的机器名 LoginId = @LoginId , -- 客户端的登陆用户(OS的用户) AppName = @AppName , -- 是从查询分析器,还是应用程序来执行的 OpType = case @OpType when 2 then 4 else @OpType end , -- 记录类型,1—Insert记录,2—Update前记录,3—Delete前记录,4—Update后记录 RowCnt = @Rows , -- 影响了多少行数据 d. * -- 改前或者删除前记录 from deleted d,#t t union all select EvTime = getdate (), -- 访问时间 Sql = t.EventInfo, -- 执行的Sql语句 UserId = @UserId , -- 连接的时候使用的哪个Sql登陆用户 HostName = @HostName , -- 客户端的机器名 LoginId = @LoginId , -- 客户端的登陆用户(OS的用户) AppName = @AppName , -- 是从查询分析器,还是应用程序来执行的 OpType = @OpType , -- 记录类型,1—Insert记录,2—Update前记录,3—Delete前记录,4—Update后记录 RowCnt = @Rows , -- 影响了多少行数据 i. * -- 改后或者新插入记录 from inserted i,#t t else select EvTime = getdate (), -- 访问时间 Sql = t.EventInfo, -- 执行的Sql语句 UserId = @UserId , -- 连接的时候使用的哪个Sql登陆用户 HostName = @HostName , -- 客户端的机器名 LoginId = @LoginId , -- 客户端的登陆用户(OS的用户) AppName = @AppName , -- 是从查询分析器,还是应用程序来执行的 OpType = case @OpType when 2 then 4 else @OpType end , -- 记录类型,1—Insert记录,2—Update前记录,3—Delete前记录,4—Update后记录 RowCnt = @Rows , -- 影响了多少行数据 d. * -- 改前或者删除前记录 into tbLog1 from deleted d,#t t union all select EvTime = getdate (), -- 访问时间 Sql = t.EventInfo, -- 执行的Sql语句 UserId = @UserId , -- 连接的时候使用的哪个Sql登陆用户 HostName = @HostName , -- 客户端的机器名 LoginId = @LoginId , -- 客户端的登陆用户(OS的用户) AppName = @AppName , -- 是从查询分析器,还是应用程序来执行的 OpType = @OpType , -- 记录类型,1—Insert记录,2—Update前记录,3—Delete前记录,4—Update后记录 RowCnt = @Rows , -- 影响了多少行数据 i. * -- 改后或者新插入记录 from inserted i,#t t go