触发器

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值