2011-07-05 102 views
0

說我有6個表。使用觸發器來保留關係錶的歷史記錄

  1. 工作站
  2. Workstation_CL
  3. 位置
  4. Location_CL
  5. 特點
  6. Features_CL
我目前使用觸發器執行插入到每個表的 「_CL」 版本

還有一個額外的字段,表示該更改是否爲「更新」 E「,」INSERT「或」DELETE「。

工作站表跟蹤「modified_by」用戶。如果用戶更新「工作站」對象的位置,則會更新「位置」表以及「工作站」表。對Workstation表的唯一修改是「modified_by」字段,以便我知道是誰進行了更改。

我遇到的問題是當我考慮拉取審計報告時。我將如何將「Location_CL」中的記錄鏈接到「Workstation_CL」中的記錄都由單獨的觸發器填充。

不知何故我的問題部分被刪除。對於那個很抱歉。

問題:如何在「Workstation_CL」和「Location_CL」中提供某種類型的唯一標識符,以便我可以識別每個修訂版?例如,當我從「Location_CL」中提取所有記錄並查看所有位置更改時,從「Workstation_CL」拉取用戶名以更改位置?

+0

那裏沒有問題嗎? –

+0

問題是:'我如何將「Location_CL」中的記錄鏈接到「Workstation_CL」' – MatBailie

+0

中的記錄,謝謝@Dems,這是正確的。 – shmick

回答

0

在觸發事件,我是能夠執行的是以下幾點:

SELECT @trans_id=transaction_id FROM sys.dm_tran_current_transaction 

這讓我對當前操作的事務ID。

與此,我能夠將其插入到相應的_CL表,然後執行選擇匹配自動生成的ID。

0

爲每個修訂版提供觸發器生成的GUID。用值填充兩個表中的字段(RevisionId)。

+0

我將GUID從Workstation_CL表中推送到Location_CL表?兩個觸發器都從獨立的存儲過程彼此獨立地發射。 – shmick

0

在每張審計表上需要2列,也許3列。

1)時間戳,所以你知道什麼時候進行了更改。
2)用戶已更改,因此您可以跟蹤是誰進行了更改 - 我假定位置可以獨立於Workstation進行更改。 3)您也可能需要交易的標識符。我想你可以從DB獲得一個ID,但我不確定。

雖然我覺得沒有時間戳和用戶的情況下您可以獲得有效的報告,但我不認爲您只是將用戶放在一張桌子上。

+0

我在考慮在Workstation_CL表中添加自動生成的標識符,但我需要找到一種方法來將該標識符插入到Location_CL表中... – shmick

相關問題