记录Sql Server 数据库表记录更新时使用触发器记录sql语句
因为一个表的记录怎么也没有查到是什么原因,表的一个字段全给更新成一样了。看了所有代码也没有找到原因,这就产生了这样一个需求,我需要用一个表来记录当前这个表在更新记录时的sql。
最后通过百度知道 dbcc inputbuffer(@@spid) 能返回当前执行的sql,这下就能监控到具体个表怎么被更新了。
记录日志表
CREATE TABLE [dbo].[HouseSubscription_Log](
[EventType] [varchar](50) NULL,
[Parameters] [int] NULL,
[EventInfo] [nvarchar](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
这里用了一个存储过程,一个返回当前正在被执行的sql记录:proc_dbccInputbuffer。
第二个存储过程是个触发器,用来监控这个被更新时的sql,然后向一个日志表插入这段sql代码 。
--当前正在执行的sql
create proc proc_dbccInputbuffer
as
declare @tsql varchar(max);
select @tsql='DBCC INPUTBUFFER('+cast(@@SPID as varchar(3))+')'
exec (@tsql);
go
--更新触发器
create trigger trg_TableUpdate dbo.HouseSubscription_Log 插入更新语句
ON HouseSubscription
after update
AS
begin
declare @sqlText nvarchar(2000) ;
select @sqlText=' insert into dbo.HouseSubscription_Log exec proc_dbccInputbuffer '
exec (@sqlText);
end;
go
至此就能记录表的更新语句。