这可能是一个非常愚蠢的问题,但俗话说,“唯一愚蠢的问题是你不问的问题”......
我有一个SQL Server 2008数据库,我想锁定一个记录进行编辑。但是,另一个用户可能希望同时查看该记录中的信息。因此,我希望第一个人能够锁定记录,因为他们是唯一可以编辑它的人。但是,我仍然希望其他用户可以查看数据。
这一切都是从C#前端完成的,因为它将在我们的内联网上。
答案 0 :(得分:3)
不要自己进行锁定 - 让SQL Server自己处理它。
只要您SELECT
,您就会在行上放置所谓的共享锁定 - 其他想要也读取该行的用户也可以这样做。
只有当您的代码转到更新行时,才会在该行上放置独占锁定,以便能够对其进行更新。在这段时间内,在您提交交易之前,没有其他用户可以读取您正在更新的那一行。
答案 1 :(得分:2)
要扩展Marc_s的答案,阅读器也可以使用
set transaction isolation Level read uncommitted
语句as described here强制读取忽略可能存在的任何锁定(除了 Sch-M ,架构修改,锁定之外的明显例外)。对于不需要绝对可重复性的报告,这也是一个有用的设置,因为它可以显着提高这些报告的性能。
答案 2 :(得分:0)
除了现有答案之外:您可以启用快照隔离。这为您的事务提供了数据库读取的时间点快照。此事务根本不会对数据进行锁定。它不会阻止。