记录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

至此就能记录表的更新语句。

posted @ 2024-12-09 11:07  名无  阅读(17)  评论(0编辑  收藏  举报