22,210
社区成员
发帖
与我相关
我的任务
分享
--1.建表
create table t(id int,v varchar(10));
insert into t values(1,'abc')
--2.存储过程,用来模拟修改t表的数据
create proc proc_t(@id int,@v varchar(10))
as
update t
set v = @v
where id = @id
go
--3。创建日志表
create table tb_log(eventtype nvarchar(14),prama smallint,eventinfo nvarchar(1000),create_time datetime default getdate())
go
--4.触发器,修改数据时可以触发,从而记录下修改的sql
create trigger dbo.trigger_t
on t
after update
as
insert into tb_log(eventtype,prama,eventinfo)
exec('DBCC INPUTBUFFER('+@@spid+')')
go
--5.模拟修改数据
exec proc_t 1,'123'
go
update t
set v = 'xxx'
where id = 1
go
--6.显示监控日志
select * from tb_log
/*
eventtype prama eventinfo create_time
Language Event 0 update t set v = 'xxx'where id = 1 2016-12-14 10:25:55.820
Language Event 0 exec proc_t 1,'123' 2016-12-14 10:26:05.840
*/
if exists(select 1 from inserted) and exists(select 1 from deleted)
--判定是更新数据, 再写到你的log表里面就行.
如果这个是非常关键的表. 建议lz做更加严格的监控. 触发器不是长久之计. (消耗性能)