用觸發器記錄資料庫表記錄更改日誌

2021-05-27 05:26:14 字數 1300 閱讀 8415

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

簡單利用觸發器監控表記錄的更改

監控資料庫使用者行為可以利用資料庫審計,logminer日誌挖掘,觸發器等手段,但前兩者操作起來比較麻煩,利用觸發器可簡單的滿足一些特殊的監控需求。以下是利用觸發器監控表記錄被誰更改的例子 顯示授權給所有使用者查詢這兩個檢視 grant select on sys.v session to publ...

mysql 用觸發器記錄操作

mysql 不能在乙個觸發器中進行insert,update,delete操作,需分別建三個觸發器 insert觸發器 delimiter create trigger tri city insert after insert on t xfw city foreach rowbegin inser...

MYSQL對錶建立修改本表記錄觸發器之後報錯

記錄下在mysql中對剛剛insert的資料進行修改遇見的錯誤。drop trigger ifdelimiter create insert each rowbegin set new.is dele 1 where id new.id end delimiter 執行指令碼正常能通過,但是在執行i...