分享

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

 quasiceo 2016-11-18

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

2011-08-04 13:31 qinyanlu CSDN博客 字号:T | T
一键收藏,随时查看,分享好友!

数据库操作中,通过设置触发器,可以来记录数据库表及更改日志的信息。那么触发器该怎么设置呢?本文主要就介绍了这一过程的触发器的设置工作,希望能够对您有所帮助。

AD:51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验

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

--创建触发器

  1. Create TRIGGER [dbo].[triINF_OrganLog]  
  2.  
  3. ON  dbo.INF_Organ  
  4.  
  5. AFTER DELETE,UPDATE  
  6.  
  7. AS   
  8.  
  9. BEGIN  
  10.  
  11. SET NOCOUNT ON;  

--设置增加触发器的表

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

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

  1. if object_id('Logs_'+@table) is null    
  2.  
  3. begin   
  4.  
  5. --生成日志表  
  6.  
  7. exec ('select * into Logs_'+@table+' from '+@table+' where 1<>1')  
  8.  
  9. --增加日志字段  
  10.  
  11. exec ('alter table Logs_'+@table+' add LogId int IDENTITY (1,1) NOT NULL primary key')    
  12.  
  13. exec ('alter table Logs_'+@table+' add LogType varchar(50)')      
  14.  
  15. exec ('alter table Logs_'+@table+' add LogDate datetime')    
  16.  
  17. end 

--记录日志

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

--获取操作类型

  1. set @logType='''delete'''  
  2.  
  3. select @logType='''update''' from inserted 

--组合执行语句

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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多