在SQL 2005-2008中锁定行

8
有没有一种方法可以在不启动事务的情况下锁定SQL 2005-2008数据库中的行,以便其他进程在解锁之前无法更新该行?
3个回答

4

您可以使用RowLock或其他提示,但是需要小心..

HOLDLOCK提示将指示SQL Server保持锁定状态直到您提交事务。ROWLOCK提示仅会锁定此记录,并不会发出页面或表锁。

如果您关闭连接或超时,锁定也将被释放。我非常小心地执行此操作,因为它会立即停止任何命中此行的SELECT语句。 SQL Server具有许多可用的锁定提示。当您搜索HOLDLOCK或ROWLOCK时,可以在Books Online中看到它们。


我已经尝试过这个,但它并不符合我的要求。当我执行更新操作时,它确实持有锁。更新操作会等待直到锁被释放,然后才会更新记录(这不是我想要的)。其次,我仍然可以毫无问题地执行选择操作。 - Martijn

1

服务器中执行的所有操作都在事务中发生,无论是隐式还是显式。

您不能仅使用行锁定(使行只读)而没有事务。您可以将数据库设置为只读,但不能仅针对一行进行设置。

解释您的目的,可能会有更好的解决方案。隔离级别、锁提示和行版本控制


0
你需要锁定一行吗,还是Sql Server的应用程序锁可以满足你的需求?
应用程序锁只是一个带有名称的锁,你可以“锁定”、“解锁”并检查它是否被锁定。详情请参见上面的链接。(如果你的连接关闭等情况发生,它们会自动解锁,因此往往会自我清理)

我无法使用应用程序锁,因为访问“已锁定”行的其他应用程序不知道它们需要先检查应用程序锁。 - alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接