2012-06-11 107 views
0

我正在設置一個用於數據表比較的新系統。這裏發生了什麼:計算數據表和臨時存儲之間的差異

我的軟件查詢第三方數據庫,我們沒有選擇寫入數據或改變結構。結果是一個DataTable。此時,此數據表同步,然後以XML格式保存到磁盤。下一次同步時,查詢再次返回一個DataTable。然後,我們從磁盤加載存儲的數據表並開始計算diff:新的,已更改和已刪除的記錄。只有差異記錄被同步,並且存儲的XML被最新的查詢取代。

這工作正常,但性能較差的查詢較大。所以我們希望將數據切換並存儲在SQL Server(2008及更高版本)數據庫中。爲此,我們正在尋找最佳實踐。我們想到的一件事就是計算記錄的某種散列,並用它來檢查記錄是否發生了變化。該系統必須爲所有類型的DataTables工作,所以沒有嚴格的列結構。

SQL Server支持這樣的事情嗎?或者更好地計算代碼中的散列並將其存儲到SQL中?我們認爲沒有必要存儲整個記錄;新的記錄將在源表中。對於修改後的記錄,只需使用散列查找更改即可,對於已刪除的記錄,足以存儲記錄的主鍵以便能夠刪除目標系統中的記錄。

回答

0

SQL Server允許您定義INSERT,UPDATE和DELETE記錄在數據庫中的查詢的觸發器。 SQL Server始終刪除並重新插入記錄而不是更新。它將兩個虛擬表傳遞給觸發器過程:「已刪除」和「已插入」。比較這兩者之間的主鍵會告訴你哪個操作正在發生。

我會建議創建一個交易歷史記錄表,爲通過觸發器的每個主鍵插入記錄。然後,您稍後將運行同步過程以刪除並重新插入同步DataTable的所需記錄並清除交易記錄。

+0

對不起,但我不知道你的意思。你可能有某種例子嗎? – Jasper

相關問題