如何在SQL Server中锁定表

时间:2014-02-24 08:29:44

标签: sql sql-server

如何在SQL Server中锁定表?我找到了带锁的运行查询,但也读取了事务 困惑如何使用这些。

我有两个进程首先读取表,然后更新其中的数据。我希望只有一个更新,其他人在阅读中获得此更新。我的流程的工作如下: -

  • 锁定表
  • 读取数据
  • 如果数据未被其他进程更新,则更新数据。
  • 释放锁定。

谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用TABLOCKX提示来锁定整个表格,但锁定整个表格通常是一个坏主意,如果您确实需要,可能需要重新考虑。

如果您想确保更新最新数据,可以使用rowversion列,并在更新前仔细检查,而不是锁定整个表格进行阅读。

答案 1 :(得分:1)

在您的select语句中,您可以提供“select for update”table hintwith (updlock)。根据您要更新的记录百分比及其物理分布,这可能比表锁更好。

但正如Fedor Hajdu指出的那样,你可能想要的是一种乐观的锁定方案。查看READ COMMITTED SNAPSHOT隔离级别的文档。您可能还会发现这个article非常有用。