如何用觸發(fā)器實(shí)現(xiàn)記錄數(shù)據(jù)庫表和記錄更改日志的操作
作者:qinyanlu
數(shù)據(jù)庫操作中,通過設(shè)置觸發(fā)器,可以來記錄數(shù)據(jù)庫表及更改日志的信息。那么觸發(fā)器該怎么設(shè)置呢?本文主要就介紹了這一過程的觸發(fā)器的設(shè)置工作,希望能夠?qū)δ兴鶐椭?/div>
在數(shù)據(jù)庫操作中,我們常常需要記錄數(shù)據(jù)庫表以及記錄更改日志等信息,以方便我們在數(shù)據(jù)庫出現(xiàn)錯(cuò)誤時(shí),可以及時(shí)地查看日志進(jìn)行問題排查。而這些過程可以通過設(shè)置觸發(fā)器來實(shí)現(xiàn)的,本文主要就介紹了使用觸發(fā)器來記錄數(shù)據(jù)庫表及記錄更改日志的方法,接下來就讓我們來一起了解一下這一過程吧。
--創(chuàng)建觸發(fā)器
- Create TRIGGER [dbo].[triINF_OrganLog]
- ON dbo.INF_Organ
- AFTER DELETE,UPDATE
- AS
- BEGIN
- SET NOCOUNT ON;
--設(shè)置增加觸發(fā)器的表
- declare @table varchar(100)
- set @table='INF_Organ' --需要設(shè)置表名
--如果日志表不存在則生成日志表
- 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 --修改記錄轉(zhuǎn)為為臨時(shí)表
- declare @logType varchar(50),@columns varchar(4000),@sql varchar(4000)
--獲取操作類型
- set @logType='''delete'''
- select @logType='''update''' from inserted
--組合執(zhí)行語句
- 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
關(guān)于用觸發(fā)器記錄數(shù)據(jù)庫表和記錄更改日志的知識就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
【編輯推薦】
責(zé)任編輯:趙鵬
來源:
CSDN博客


相關(guān)推薦




