SQL 2005-2008中的锁定行

时间:2020-03-06 14:30:44  来源:igfitidea点击:

有没有一种方法可以在不启动事务的情况下锁定SQL 2005-2008数据库中的行,以便其他进程只有在解锁该行后才能更新该行?

解决方案

我们在服务器中执行的所有操作都发生在隐式或者显式事务中。

我们不能简单地锁定没有事务的行(使该行为只读)。我们可以使数据库只读,但不能仅一行。

说明目的,这可能是一个更好的解决方案。隔离级别和锁定提示以及行版本控制。

我们可以使用RowLock或者其他提示,但要小心。

HOLDLOCK提示将指示SQL Server保持锁定,直到我们提交事务为止。 ROWLOCK提示将仅锁定该记录,而不会发出页或者表锁定。

如果我们关闭连接或者超时,该锁也将被释放。我会非常小心,因为它会停止所有击中该行的SELECT语句。 SQL Server有许多可以使用的锁定提示。在HOLDLOCK或者ROWLOCK上搜索时,我们可以在联机丛书中看到它们。

我们是否需要锁定一行,还是应该使用Sql Server的"应用程序锁定"来完成所需的工作?

Application Locks只是一个具有我们可以"锁定","解锁"并检查它是否被锁定的名称的锁。有关详细信息,请参见上面的链接。 (如果连接被关闭等,它们将被解锁,因此倾向于自行清理)