测试表
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