是否可以锁定记录并仍然允许其他用户阅读它?

时间:2014-01-08 19:58:14

标签: c# sql-server-2008 tsql record-locking

这可能是一个非常愚蠢的问题,但俗话说,“唯一愚蠢的问题是你不问的问题”......

我有一个SQL Server 2008数据库,我想锁定一个记录进行编辑。但是,另一个用户可能希望同时查看该记录中的信息。因此,我希望第一个人能够锁定记录,因为他们是唯一可以编辑它的人。但是,我仍然希望其他用户可以查看数据。

这一切都是从C#前端完成的,因为它将在我们的内联网上。

3 个答案:

答案 0 :(得分:3)

不要自己进行锁定 - 让SQL Server自己处理它。

只要您SELECT,您就会在行上放置所谓的共享锁定 - 其他想要也读取该行的用户也可以这样做。

只有当您的代码转到更新行时,才会在该行上放置独占锁定,以便能够对其进行更新。在这段时间内,在您提交交易之前,没有其他用户可以读取您正在更新的那一行。

答案 1 :(得分:2)

要扩展Marc_s的答案,阅读器也可以使用

set transaction isolation Level read uncommitted 

语句as described here强制读取忽略可能存在的任何锁定(除了 Sch-M ,架构修改,锁定之外的明显例外)。对于不需要绝对可重复性的报告,这也是一个有用的设置,因为它可以显着提高这些报告的性能。

答案 2 :(得分:0)

除了现有答案之外:您可以启用快照隔离。这为您的事务提供了数据库读取的时间点快照。此事务根本不会对数据进行锁定。它不会阻止。