Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2008-尝试更新锁定行时如何引发错误?_Sql Server_Transactions_Locking - Fatal编程技术网

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语句。这就解决了我的问题!