2016-11-15 55 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

相關問題