遇到一個問題,sql 資料庫表中被莫名洗掉資料,找不出來原因,在網上找了一個觸發器的方法記錄delete日志,但是記錄的資料不全找不到是誰執行的delete操作,請資料庫大神幫忙解答一下,謝謝。
下面是網上的例子:
--參考,記錄操作的示例
--創建記錄的日志表
create table t_log(
id int identity(1,1) primary key,
作業站名 nchar(30) not null default host_name(),
操作員 sysname DEFAULT SUSER_SNAME(),
操作時間 datetime default getdate(),
事件型別 nvarchar(30),
引數 int,
執行的陳述句 nvarchar(255))
go
--演示用的資料表
create table test(id int)
go
--記錄操作的觸發器
create trigger t_update on test
for insert,update,delete
as
insert t_log(事件型別,引數,執行的陳述句) exec( 'dbcc inputbuffer(@@spid) ')
go
--初始化表
insert into test values(1)
go
update test set id=100
go
--顯示記錄情況
select * from t_log
go
--洗掉演示環境
drop table t_log,test
uj5u.com熱心網友回復:
有沒有好的方法監控到誰執行的delete操作uj5u.com熱心網友回復:
參考 https://blog.csdn.net/ap0405140/article/details/8896330uj5u.com熱心網友回復:
測驗過你的代碼沒有問題啊。
你說的資料不全是什么意思?操作員列是空的嗎?
但是盡管代碼沒錯,SUSER_SNAME()的使用還是需要斟酌一下。如果是winform程式,使用windows帳號直連資料庫,那么可以記錄正確的操作員,但是如果是web程式,那么整條資料鏈中,都需要另外加入操作員資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/22762.html
標籤:疑難問題
下一篇:連接SQL 2012出錯
