1. 程式人生 > 其它 >用觸發器追蹤到底是哪個儲存過程刪了資料

用觸發器追蹤到底是哪個儲存過程刪了資料

有朋友用SQL Server開發了很多儲存過程,這些儲存過程會訪問表Students。忽然有天發現表Students的資料少了,想知道是哪個儲存過程刪了資料。於是他在表Students上建立了Delete觸發器。

如何用觸發器追蹤到底是哪個儲存過程刪了資料呢?我們用例項來演示下。

一,建立表Students 和資料

create table students(
id integer primary key,
name varchar(20),
age int
); insert into students values(1, 'Flower', 18); insert into students values
(2, 'John', 19); insert into students values(3, 'Jeff', 17);

二,建立儲存過程

create procedure del_student @del_id integer
as
begin
   delete from tosska.dbo.students where id =@del_id;
end;

三,建立Delete觸發器

通過dbcc inputbuffer 命令,將觸發Delete觸發器的程式資訊,寫入日誌表tosska.dbo.log_students。

create trigger students_delete
on students after delete as declare @info nvarchar(4000); declare @source table (EventType nvarchar(30), Parameters int, EventInfo nvarchar(4000)); begin if object_id(N'tosska.dbo.log_students', N'U') is null create table tosska.dbo.log_students(spid int, log_time datetime, application nvarchar(128), info varchar
(4000)); insert into @source exec ('dbcc inputbuffer (' + @@spid + ') with no_infomsgs'); select top 1 @info = EventInfo from @source; insert into tosska.dbo.log_students values(@@spid, getdate(), app_name(), @info); end;

四,嘗試刪除資料

exec dbo.del_student 1;

五,檢視日誌表

applicaiton欄位記錄了客戶端程式名字,info欄位記錄了刪除資料的儲存過程,看起來很完美。

SQL優化工具,讓您節省時間,專注公司業務