2016-11-15 53 views
1

在我的应用程序中,多个用户可以读取或修改相同的表格。但是,当用户修改了一行时,其他用户就不能再使用它了。SQL Server 2008 - 如何在尝试更新锁定行时引发错误?

我正在使用交易与隔离级别阅读未压缩。问题是,当用户更新表中的一行并且另一个用户试图更新同一行时 - 第二个事务将等待第一个事务处理为ROLLBACK/COMMIT,然后才能更新该行。

我想要做的是在这种情况下提出一个错误,对于第二个用户 - ,所以他不用等那么长的时间

我该怎么做?

问题在于交易量非常大(包括多个程序),因此锁定一段时间后会有阻止某些用户的可能性。

谢谢

+0

'READPAST','sp_getapplock'或手工制作的逻辑锁。 –

+0

感谢@Ivan的编辑和评论:) – VictorT

回答

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支持失败的快速锁定采集失败。如果是这样,那么上面的提示可能会被忽略。

+1

这是伟大的 - 谢谢;这些TabelHints也适用于UPDATE,INSERT和DELETE语句。所以这解决了我的问题! – VictorT

相关问题