IT技术网www.itjs.cn

当前位置:首页 > 数据库 > MySQL > 如何用触发器实现记录数据库表和记录更改日志的操作

如何用触发器实现记录数据库表和记录更改日志的操作

发布时间:2011-08-04 13:31 来源:未知

数据库操作中,我们常常需要记录数据库表以及记录更改日志等信息,以方便我们在数据库出现错误时,可以及时地查看日志进行问题排查。而这些过程可以通过设置触发器来实现的,本文主要就介绍了使用触发器来记录数据库表及记录更改日志的方法,接下来就让我们来一起了解一下这一过程吧。

--创建触发器

Create TRIGGER [dbo].[triINF_OrganLog]   ON  dbo.INF_Organ   AFTER DELETE,UPDATE   AS    BEGIN   SET NOCOUNT ON;  

--设置增加触发器的表

declare @table varchar(100)   set @table='INF_Organ' --需要设置表名 

--假如日志表不存在则生成日志表

if object_id('Logs_'+@table) is null     begin    --生成日志表   exec ('select * into Logs_'+@table+' from '+@table+' where 1<>1')   --增加日志字段   exec ('alter table Logs_'+@table+' add LogId int IDENTITY (1,1) NOT NULL primary key')     exec ('alter table Logs_'+@table+' add LogType varchar(50)')       exec ('alter table Logs_'+@table+' add LogDate datetime')     end 

--记录日志

select * into #deleted from deleted --修改记录转为为临时表   declare @logType varchar(50),@columns varchar(4000),@sql varchar(4000) 

--获取操作类型

set @logType='''delete'''   select @logType='''update''' from inserted 

--组合执行语句

select @columns=isnull(@columns+',','')+name from syscolumns where id =object_id(@table)    set @sql='insert into dbo.Logs_'+@table+'(LogDate,LogType,'+@columns+') select getdate(),'+@logType+','+@columns+' from #deleted'   exec(@sql)   SET NOCOUNT OFF;    END 

关于用触发器记录数据库表和记录更改日志的知识就介绍到这里了,希望本次的介绍能够对您有所收获!