Sql server SQL Server 2008-尝试更新锁定行时如何引发错误?
在我的应用程序中,多个用户可以读取或修改相同的表。但是,当一行被用户修改时,其他行应该不能再使用它了 我正在使用隔离级别为未限制读取的事务。问题是,当一个用户更新表中的一行,而另一个用户尝试更新同一行时,第二个事务将等待第一个事务回滚/提交,然后才能更新该行 我想做的是在这种情况下为第二个用户提出一个错误,这样他就不必等待太久 我该怎么做 问题是事务非常大(包括多个过程),因此可能会因为锁而在相当长的一段时间内阻塞某些用户Sql server SQL Server 2008-尝试更新锁定行时如何引发错误?,sql-server,transactions,locking,Sql Server,Transactions,Locking,在我的应用程序中,多个用户可以读取或修改相同的表。但是,当一行被用户修改时,其他行应该不能再使用它了 我正在使用隔离级别为未限制读取的事务。问题是,当一个用户更新表中的一行,而另一个用户尝试更新同一行时,第二个事务将等待第一个事务回滚/提交,然后才能更新该行 我想做的是在这种情况下为第二个用户提出一个错误,这样他就不必等待太久 我该怎么做 问题是事务非常大(包括多个过程),因此可能会因为锁而在相当长的一段时间内阻塞某些用户 谢谢当第二个用户尝试从自己的事务中查询时,您可以使用NOWAIT提示:
谢谢当第二个用户尝试从自己的事务中查询时,您可以使用
NOWAIT
提示:
用户一号
BEGIN TRAN
SELECT *
FROM someTable
WHERE blah
用户二
(first user's transaction still open)
BEGIN TRAN
SELECT *
FROM someTable WITH(NOWAIT)
WHERE blah
我记得在某个地方读到,只有Oracle和Postgres支持fail fast lock收购。如果是这样,则上述提示可能会被忽略。当第二个用户尝试从自己的事务查询时,您可以使用
NOWAIT
提示:
用户一号
BEGIN TRAN
SELECT *
FROM someTable
WHERE blah
用户二
(first user's transaction still open)
BEGIN TRAN
SELECT *
FROM someTable WITH(NOWAIT)
WHERE blah
我记得在某个地方读到,只有Oracle和Postgres支持fail fast lock收购。如果是这样,那么上面的提示可能会被忽略。
readpass
,sp_getapplock
或手工制作的逻辑锁。感谢@Ivan的编辑和评论:)readpass
,sp_getapplock
或手工制作的逻辑锁。感谢@Ivan的编辑和评论:)太好了-谢谢;这些选项卡提示也适用于UPDATE、INSERT和DELETE语句。这就解决了我的问题!那太好了——谢谢;这些选项卡提示也适用于UPDATE、INSERT和DELETE语句。这就解决了我的问题!