記錄使用者語法

有朋友需要透過 Trigger 記錄更新資料表的記錄變更、語法和使用者,記錄變更透過 inserted 和 deleted ㄧ般人都會,在此不詳述。

雖然我非常不贊成這種傷效能與管理的做法,但可能在特定時空適用,所以依然簡單寫個範例

use tempdb
create table t(c1 int)
go

create trigger trg on t
for insert
as
create table #t([user] nvarchar(100),sname nvarchar(100),eventtype varchar(100),parameters int,eventinfo varchar(4000))
insert #t(eventtype,parameters,eventinfo) exec(‘dbcc inputbuffer(@@spid)’)
update #t set [user]=user,[sname]=suser_sname()
select * from #t
go

由於 dbcc inputbuffer 是以 batch 內容,所以以下語法觸發 trigger 四次,但呈現出重複的內容

insert t values(1)
insert t values(2)
insert t values(3)
insert t values(4),(5),(6),(7)

image

 

可替代的作法很多

例如

這些做法各有版本(2008、2008 R2、2012,企業版、標準版)以及開發的複雜度考量,你需要自行研究

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: