实际问题如下:
有一个表A,表A中有一个字段B被某个存储过程修改了。
比如B的初始值为1,被某个存储过程改为了0,但是现在存储过程大概有1000多个,有没有什么好的方法,可以监测到这个字段是被谁修改的。
实现思路:
这种情况下,可以用多种方法,比较简单的就是用触发器,比如,要监控A表的数据修改,那么可以给A表创建一个触发器,同时创建一个日志表,当A表的数据被修改时,通过日志表记录,但是修改数据的sql语句或者存储过程。
实现代码如下:
--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 */