2010-08-30 24 views
1

我在Sql Server中有一些表。我想記錄行,如果行更新或刪除。我怎樣才能組織這個過程?如何組織更新的行日誌記錄

樣本表結構:

[uniqueGUID] [uniqueidentifier] NOT NULL, 
    *[kod_a] [nchar](5) NOT NULL, 
    *[kod_b] [nchar](5) NOT NULL, 
    *[kod_c] [nchar](2) NOT NULL, 
    *[kod_d] [nchar](4) NOT NULL, 
    [name] [nvarchar](25) NULL, 
    [sname] [nvarchar](25) NULL, 
    [address] [nvarchar](25) NULL, 
    [payment] money NULL 

注:標記的列(kod_a,kod_b,kod_c,kod_d)是唯一constaint在一起。另外的表格也在相同的結構中,列數可能不同。

一些想法,請。

謝謝。

+0

您的意思是說,只要某行被刪除或更新,您就需要審計追蹤?你需要登錄什麼?只是數據?用戶?還要別的嗎? – Oded 2010-08-30 11:32:19

+0

我想在初始表單中更改另一個表中的行,以及更改它的人,datetime和一些adition信息。 – loviji 2010-08-30 11:58:27

回答

0

舊數據可以使用Deleted tabletrigger中曝光。我會列出一個簡單的例子來幫助你開始。

create trigger YourTriggerName on YourTable 
after update, delete 
as 
    /* Deleted table contains the "old" values before the update/delete operation */ 
    insert into YourLoggingTable 
     (UniqueGUID, kod_a, ..., payment, DateModified) 
     select UniqueGUID, kod_a, ..., payment, getdate() 
      from Deleted 
go 
0

如果你所有的更新都在經歷一個單一的存儲過程時更新或在此表中刪除數據,你可以創建並執行審計存儲過程。

觸發器很好,但它們有時會引起疼痛。儘可能避免使用它們。

+0

根據我的經驗,這種技術太嚴格了,可能會無意中避開。您將永遠不會使用此技術捕獲存儲過程之外所做的更改(例如,DBA使用SSMS中的更新語句快速修復數據)。這就是爲什麼我喜歡這裏的觸發器。無論數據如何/在哪裏更改,都會捕獲更改。 – 2010-08-30 15:09:28

+0

我同意Joe,IMO在這種情況下使用觸發器是一種更安全的策略 – 2010-08-30 15:21:49