当前位置:  开发笔记 > 数据库 > 正文

在查询中使用WITH NOLOCK表提示使用视图 - 它是否在视图中传播?

如何解决《在查询中使用WITHNOLOCK表提示使用视图-它是否在视图中传播?》经验,为你挑选了2个好方法。

如果在SQL Server中的View上使用"WITH NOLOCK"查询提示,它是否会将该提示传播到视图定义本身,即使NOLOCK未用于View定义中的原始表?需要这个的原因是,有时支持人员想要进行大量耗时的查询,但不希望使用应用程序本身内的视图强制锁定所有查询.



1> Rory..:

是的,NOLOCK将传播到视图定义使用的表(至少在SQL Server 2005中).

请参阅MSDN中的表提示:

在SQL Server 2005中,所有锁定提示都会传播到视图中引用的所有表和视图.此外,SQL Server执行相应的锁一致性检查.

然而,

如果表包含计算列,并且计算列是通过访问其他表中的列的表达式或函数计算的,则表提示不会在这些表上使用.这意味着表提示不会传播.例如,在查询中的表上指定了NOLOCK表提示.此表具有计算列,这些列由表达式和函数的组合计算,这些表达式和函数访问另一个表中的列.表达式和函数引用的表在访问时不使用NOLOCK表提示.

如果你正在使用索引视图,你可能想要阅读更多,因为那里也有一些特殊情况.

另请参阅视图分辨率以获取更多信息



2> 小智..:

只是为了补充Rory的优秀答案.

他写道:"是的,NOLOCK将传播到视图定义使用的表格(至少在SQL Server 2005中)."

实际上,这也适用于SQL 2000. 来自BOL:

因为select_statement使用SELECT语句,所以使用FROM子句中指定的提示和提示是有效的.有关更多信息,请参阅FROM和SELECT.


我可以确认我已经在SQL 2000视图上测试并使用过它.
推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有