-1
我正在處理會計項目並面臨併發更新問題。我按照下面方案
1)用戶1檢索COLUMN1數據
2)用戶2還檢索COLUMN1數據
3),同時更新用戶2列1的數據用戶1更新列1數據
4)我必須告訴用戶列1的數據是已經更新請刷新細節&如果從原始修改更新。併發問題,當更新sql服務器表列
,我不希望從檢索其已經被用戶1,檢索如何處理這種類型的併發或任何內建的功能在SQL Server中提供的數據限制用戶2?
我正在處理會計項目並面臨併發更新問題。我按照下面方案
1)用戶1檢索COLUMN1數據
2)用戶2還檢索COLUMN1數據
3),同時更新用戶2列1的數據用戶1更新列1數據
4)我必須告訴用戶列1的數據是已經更新請刷新細節&如果從原始修改更新。併發問題,當更新sql服務器表列
,我不希望從檢索其已經被用戶1,檢索如何處理這種類型的併發或任何內建的功能在SQL Server中提供的數據限制用戶2?
重申你的問題我的理解是:
- 用戶1 retrived COLUMN1數據
- 用戶2也retrived COLUMN1數據
- 用戶1更新COLUMN1數據
- 用戶2要更新列1上的陳舊數據。您希望提醒用戶2數據已過時,用戶2應該執行刷新(獲取最新值),然後再次更新。
這正是rowversion的用途。您將此記錄添加到新記錄中。每當數據在記錄上發生變化時,Sql服務器將處理分配值並增加它們。您應該檢索該值以及該記錄的其他相關詳細信息,然後將其包含在更新聲明中。如果值不匹配,則表示存在併發性錯誤,則記錄在用戶檢索數據的最後一次和希望更新數據的時間之間更新。
另請注意,在這種情況下,任何時候對記錄進行任何更改都會改變rowversion,而不僅僅是針對該特定列。
在表中執行rowversion後的邏輯。
UPDATE
語句的WHERE
子句中的rowversion值。
rowversion
值。 (或者該記錄已被刪除,但假設情況並非)。
您可以[設置事務隔離級別(http://sqlperformance.com/2014/07/t-sql-queries/isolation-levels) – stuartd