为了防止锁定和死锁,我决定在我的视图中使用表提示WITH(NOLOCK)
。
效果很好,用户也很满意。
当从应用程序(称为PIVOTAL的CRM应用程序)中调用这些视图时,问题就开始了。
当此应用程序查询我的视图(其中包含WITH(NOLOCK)
)时,它会添加一个不同的表锁READCOMMITTED
。
例如:
select * from MY_view WITH(READCOMMITTED)
结果是一条SQL Server错误消息告诉我有关冲突的锁。
现在,我无法更改应用程序及其生成脚本的方式。
有没有办法让SQL Server忽略My_view
之外的提示?
有没有办法让NOLOCK
优先于READCOMMITTED
,以便我可以将其保留在My_View
内?
谢谢和问候。 马塞洛
答案 0 :(得分:0)
我不认为这里有一个简单的解决方案。 SQL Server不能使用冲突锁,因为它不知道要应用于基础表的锁。
您可以使用READCOMMITTED
创建一组单独的视图供您阅读吗?