触发器

  测试表
  
  
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、付费专栏及课程。

余额充值