我正在从事会计项目并面临并发更新问题。我遵循了以下场景
1)User1检索column1数据
2)User2还检索column1数据
3)User1更新column1数据
4)在更新User2 column1数据时我必须告诉用户column1数据已经更新请刷新详细信息&如果从原始版本修改,则更新。
并且我不想限制 User2 检索已经由 User1 检索的数据,如何处理此类型的并发或任何内置函数在SQL Server中可用吗?
答案 0 :(得分:2)
按照我的理解重申你的问题:
- User1被重新检索column1数据
- User2也是已经重试的column1数据
- User1更新了column1数据
- User2想要更新column1上的陈旧数据。您想提醒用户2数据是陈旧的,用户2应该刷新(获取最新值),然后可以再次更新。
醇>
这正是rowversion的用途。您将此作为新列包含在记录中。每次数据在记录上发生更改时,Sql server都会处理赋值并递增它们。您应该检索此值以及该记录的其他相关详细信息,然后将其包含在更新语句中。如果值不匹配,则会出现并发错误,记录会在用户上次检索数据和更新数据的时间之间进行更新。
另请注意,在这种情况下,只要对记录进行任何更改,rowversion就会被更改,而不仅仅是针对该特定列。
在表格中实现rowversion后的逻辑。
WHERE
语句的UPDATE
子句中的rowversion值。
rowversion
值。 (或者删除了记录,但我们假设情况并非如此)。