以前写的触发器,主要用来发现一些很难找的程序错误的,近期突然发现,免得再次找不到,简单加了些注释贴到这里。
--
跟踪一个表的所有操作的触发器
create trigger tr_test
on test
for insert , update , delete
as
set nocount on
-- 用临时表保存exec('DBCC INPUTBUFFER...')的返回值
create table #t(EventType varchar ( 50 ),Parameters int ,EventInfo varchar ( 6000 ))
-- DBCC INPUTBUFFER需要参数spid
declare @spid varchar ( 20 )
set @spid = cast ( @@spid as varchar )
insert #t exec ( ' DBCC INPUTBUFFER ( ' + @spid + ' ) ' )
insert Test_Log(AppName,Sql,UserName,HostName,Time)
select App_Name (), -- 应用程序名,这个比较有用,可以发现是否有用查询分析器修改数据的
EventInfo, -- SQL语句,主要用来发现程序错误
SYSTEM_USER , -- 用户名
Host_name (), -- 主机名
getdate () -- 发生时间
from #t
go
create trigger tr_test
on test
for insert , update , delete
as
set nocount on
-- 用临时表保存exec('DBCC INPUTBUFFER...')的返回值
create table #t(EventType varchar ( 50 ),Parameters int ,EventInfo varchar ( 6000 ))
-- DBCC INPUTBUFFER需要参数spid
declare @spid varchar ( 20 )
set @spid = cast ( @@spid as varchar )
insert #t exec ( ' DBCC INPUTBUFFER ( ' + @spid + ' ) ' )
insert Test_Log(AppName,Sql,UserName,HostName,Time)
select App_Name (), -- 应用程序名,这个比较有用,可以发现是否有用查询分析器修改数据的
EventInfo, -- SQL语句,主要用来发现程序错误
SYSTEM_USER , -- 用户名
Host_name (), -- 主机名
getdate () -- 发生时间
from #t
go