2

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

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

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

4

3 回答 3

3

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

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

只有当您的代码去更新行时,它才会在行上放置一个排他锁以便能够更新它。在这段时间里,没有其他用户可以读取您正在更新的一行 - 直到您提交您的事务。

于 2014-01-08T20:00:52.380 回答
2

要扩展 Marc_s 的答案,读者还可以使用

set transaction isolation Level read uncommitted 

此处描述的语句强制读取忽略可能存在的任何锁(任何Sch-M、模式修改、锁除外)。对于不需要绝对重现性的报告,这也是一个有用的设置,因为它可以显着提高这些报告的性能。for

于 2014-01-08T20:04:20.673 回答
0

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

于 2014-01-08T20:06:31.657 回答