伙计们 - 就像我在Stack上看到的那样重新讨论这个话题道歉,关于这个话题已经有很多问题了。
但我发现自己处在一个有趣的地方,我希望你能提供帮助。
高级问题:SQL SERVER是否有余地决定视图应该包含在ISOLATION LEVEL SNAPSHOT中?
我知道这听起来像是一个疯狂的问题,但我正试图在我遇到的问题上耗尽所有途径。
我正在使用运行35个查询的应用程序,通过链接服务器从另一个数据库中检索数据。查询是分别针对一个表的简单选择。所有数据库操作都是针对SQL SERVER执行的,检索代码是ADO.NET/c#等。
其中34个查询运行完美 - 但是有一个糟糕的苹果,为此,我得到了事务隔离级别快照问题。
我还在应用程序之外测试了数据检索,当我在“问题”查询上实现下面的代码片段时,我也遇到了问题:
using (var trans = conn.BeginTransaction(IsolationLevel.Snapshot))
然而,当我 NOT 在所述查询上实现它时,一切都很好。 我也对其他查询进行了测试 - 有和没有“Shapshot” - 我的结果是可预测的......有了“Shapshot”,没有查询过程......如果没有实现,所有查询都会处理... < / p>
我的结果表明应用程序负责更改数据检索策略。
根据他们的知识库,我发现了这个:Locking is handled by the database level (MS SQL Server/Oracle) and not by "us". Generally, locking is row level but the optimizer may choose something different
不幸的是,我没有本机访问负责数据检索的样板应用程序代码。我怀疑这个特定的查询/表有一个或多个关键字 - 在列或查询/表命名 - 触发应用程序使用备用检索策略。根据开发人员论坛,我已经问过这种情况,我正在等待回复......
无论如何回到他们提到the optimizer may choose something different
- 他们的优化器,或者数据库优化器?可以设置SQL SERVER来进行“判断调用”吗?声明不清楚,还是我对SQL SERVER及其功能还不够?
我知道这似乎是一个疯狂的问题,但我真的想在这里淘汰所有可能的途径。 谢谢你暂停你的不相信和幽默那个疯狂的帖子:)
答案 0 :(得分:0)
显然是带有&#34;估价&#34; (可能是因为隐含的敏感性)导致应用程序构建事务。一旦我更改了视图名称,数据就会成功返回给客户端。
是的,应用程序是/是问题。