2008-09-21 29 views

回答

3

您可以使用RowLock or other hints但你应该careful ..

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

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

+0

我试过这个,但它不是我想要的。当我执行更新时,它确实拥有锁定。更新一直等到锁被释放,然后更新记录(这不是我想要的)。其次,我仍然可以在没有任何问题的情况下执行选择。 – Martijn 2010-09-22 08:26:21

1

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

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

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

0

你需要锁定,还是应该Sql Server's Application locks你需要什么?

应用程序锁只是一个名字可以“锁定”,“解锁”并检查它是否被锁定的锁。详情请参阅上面的链接。 (他们得到解锁,如果你的连接关闭等,所以往往会自己清理)

+0

我无法使用应用程序锁定,因为访问“锁定”行的其他应用程序不知道他们需要先检查应用程序锁定。 – alex 2009-09-22 19:49:46