我已经阅读了很多关于存储过程中的参数嗅探的文章(特别是在这里)以及解决它的方法。例如,这里:http://elegantcode.com/2008/05/17/sql-parameter-sniffing-and-what-to-do-about-it/
这同样适用于另一个存储过程调用的存储过程吗?即,链接文章中描述的解决方案是否也适用于嵌套存储过程。
另外,如果在调用存储过程中声明一个名为@PersonID的变量,你可以在被调用的存储过程中decalre一个名为@PersonID的变量,即DECLARE PersonID int。这将是可变阴影。
答案 0 :(得分:2)
对第一个是的。每个存储过程都是独立的,您需要在每个存储过程中应用反嗅探技术(参数屏蔽或更新的OPTIMISE FOR UNKNOWN)
对第二个是,但不是你想的原因。变量在该存储过程中具有范围仅。所以被调用者中的任何@PersonID都与调用者中的@PersonID无关。如果你在被调用者中没有@PersonID,那么你的父元素不在那里