2013-12-10 35 views
1

我們有一個程序,它包括客戶端的(多) - >網關 - >引擎... 現在客戶想一個特點,這將使他們能夠看到什麼,由誰進行了某些更改,因此我們需要將更改保存到某個歷史記錄表中。SQL服務器 - 用戶發出的跟蹤/日誌記錄更改

問題:

因爲可能有多個用戶並行連接到引擎,我們怎麼能知道,如果我們使用觸發器實現歷史跟蹤,其中用戶取得了一定的變化,我們怎樣才能識別它的SQL服務器(在以前的一些程序中,與sql的連接是順序的,它們在處理之前將用戶標識保存到表中並且使用該標識的觸發器)。

關於連接到SQL Server - 有些事情是使用EF,一些SP和一些使用動態查詢實現的。

  • CDC是不是一種選擇,因爲不是所有的客戶posses企業版,甚至有一些「黑客」將不得不採取的地方,纔能有它的工作。

  • 我讀了CONTEXT_INFO可以用來保存當前用戶ID到它,然後在sql中讀取該值...有沒有人試過?

  • 有些人甚至在修改日期和用戶ID等表格中添加列,但我們希望儘可能避免這種情況。

那麼...什麼是最好的實現方式? :)

+1

你顯然(在最後一行)有一個可以工作的回車鍵。將你的問題的其餘部分編輯成單獨的段落而不是文本牆的任何機會? –

回答

0

這一切首先可以極大地影響你的數據庫性能和磁盤空間...

但如果你堅持,你可以計算一個簡單的腳本,遍歷要監視所有表的列表並動態創建(通過sp_executesql)相關聯的觸發器。

然後爲這些觸發器的名稱約定可以幫助你以後維護起來(例如禁用所有的人,而數據密集型操作等)。

我建議,試圖說服你的客戶激活此功能僅適用於少數關鍵數據表。另外,總是隨時附帶一個禁用所有觸發器的腳本。

+0

我不堅持使用觸發器......那只是想法一個...有沒有其他的,更有效的方式來做到這一點,這就是我問:) – DavorinP

+0

這不是觸發器,它是關於性能和空間。即使我不建議白天使用生活在觸發一天,以及在你的情況,我相信觸發器是一個真正的選擇。 –