我們有一個多用戶系統,用戶將用戶保存到中央SQL Server 2005數據庫。我們遇到了一個問題,即用戶刷新數據庫中的更改,而另一用戶保存新數據。我們目前正在收集這些更改的方式是每個表的每個行的插入/更新時都會有一個時間戳列。另一個用戶將有一個時間戳存儲在客戶端,這是他從數據庫中最後一次拉出來的時間。確定自SQL Server上次訪問以來的行更改
每次保存都是在一個事務中完成的。我們正在處理的示例如下:
- 用戶1啓動保存,打開事務並插入/修改行,更改其時間戳。
- 用戶2在數據庫刷新之前User1已經提交了更改,以某種方式導致User2的時間戳更新。
- 用戶1提交交易和所有更改。
- User2從數據庫中再次刷新,但是因爲他的時間戳已更新,只有User1提交的更改的後半部分導致錯誤和應用程序崩潰。
這使我們認爲時間戳不一定是用於確定自前端系統上次訪問以來數據庫更改的最佳方法。什麼是更好的解決方案?
此外例如
- User1開始時保存,打開事務和插入/修改的行和更新其時間戳。
- User2啓動另一個保存,打開一個事務,插入/修改更新其時間戳的OTHER行,並提交他的事務。
- User3從數據庫刷新並拉下User2提交的所有數據,將其LastRefreshTimestamp更新爲由User2在db中創建的最後一個時間戳。
- User1提交他的交易。
- 用戶3再次從數據庫中刷新,但是在User2的事務結束和User1的事務結束之間根據LastRefreshTimestamp提取所有更改,並在User2事務開始之前忽略User1事務提交的所有更改。
SELECTing數據如何更改時間戳列?或者你是否也在搞隔離級別? – 2010-09-28 04:56:51
我假設你指的是「User2在用戶提交更改之前從數據庫刷新,以某種方式導致User2的時間戳更新。」它不是一個改變時間戳的選擇,很可能發生了什麼是某人正在提交導致時間戳更新的其他更改。 – link664 2010-09-28 05:10:14
當User1保存到數據庫時,實際發生了什麼變化?你能提供更新Users表的SQL嗎?此外,用戶表中是否有觸發器(或更新用戶表)? – jveazey 2011-08-05 03:28:46