SQL Server 2008 - 在尝试更新锁定行时如何引发错误?

时间:2016-11-15 11:24:54

标签: sql-server transactions locking

在我的应用程序中,多个用户可以读取或修改相同的表。但是,当用户修改了一行时,其他行不再能够使用它。

我正在使用 ISOLATION LEVEL READ UNCOMMITED 的交易。问题是,当用户更新表中的行而另一个用户尝试更新同一行时 - 第二个事务将等待第一个事务到 ROLLBACK / COMMIT ,然后才能更新行。

我想要做的是在这种情况下为第二个用户 - 引发错误,这样他就不必等待这么长时间

我该怎么做?

问题是交易非常庞大(包括几个程序),因此可能会因为锁定而在一段时间内阻止某些用户。

谢谢

1 个答案:

答案 0 :(得分:0)

当第二个用户从他自己的交易中尝试查询时,您可以使用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支持快速锁定获取失败。如果是这样,那么上面的提示可能会被忽略。