2013-10-02 59 views
2

爲了防止鎖和死鎖,我決定在我的視圖中使用表提示WITH(NOLOCK)readcommitted和nolock鎖衝突

這樣做效果很好,用戶對此感到滿意。

當應用程序(稱爲PIVOTAL的CRM應用程序)內部調用這些視圖時,問題就開始了。

當這個應用程序查詢我的視圖(其中有WITH(NOLOCK)),它添加了一個不同的表鎖READCOMMITTED

例如:

select * from MY_view WITH(READCOMMITTED) 

這樣做的結果是SQL Server錯誤消息告訴我的鎖衝突。

現在,我無法更改應用程序及其生成腳本的方式。

有沒有辦法讓SQL Server忽略My_view之外的提示? 有沒有辦法讓NOLOCK勝過READCOMMITTED,這樣我就可以保持在My_View之內?

感謝和問候。 Marcello

回答

0

我不認爲這裏有一個簡單的解決方案。 SQL Server無法獲取衝突的鎖,因爲它不知道要將哪些鎖應用於基礎表。

您可以使用READCOMMITTED爲應用程序創建一組單獨的視圖嗎?

+0

感謝這個Szymon,我正在考慮爲這個數據庫啓用快照隔離級別。 –