8

有没有办法在不启动事务的情况下锁定 SQL 2005-2008 数据库中的一行,这样其他进程在解锁之前无法更新该行?

4

3 回答 3

4

您可以使用RowLock 或其他提示,但您应该小心..

HOLDLOCK 提示将指示 SQL Server 持有锁,直到您提交事务。ROWLOCK 提示将只锁定这条记录,而不发出页或表锁。

如果您关闭连接或超时,锁定也将被释放。我会非常小心地这样做,因为它会阻止任何命中这一行的 SELECT 语句死在他们的轨道上。SQL Server 有许多可以使用的锁定提示。当您在 HOLDLOCK 或 ROWLOCK 上搜索时,您可以在联机丛书中看到它们。

于 2008-09-21T19:02:42.017 回答
1

您在服务器中执行的一切都发生在事务中,无论是隐式的还是显式的。

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

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

于 2008-09-21T19:02:10.473 回答
0

您是否需要锁定一行,或者Sql Server 的应用程序锁是否应该满足您的需求?

应用程序锁只是一个具有名称的锁,您可以“锁定”、“解锁”并检查它是否被锁定。有关详细信息,请参阅上面的链接。(如果您的连接关闭等,它们会解锁,所以倾向于清理自己)

于 2009-09-22T15:03:16.487 回答