with recompile 不太明白。有两点疑问msdn是这样说的 
如果为过程提供的参数不是典型的参数,并且新的执行计划不应被缓存或存储在内存中,则   WITH   RECOMPILE   子句会很有用
1:头一次执行查询。传递@Table = atable 参数后执行
SELECT * FROM @Table
这会执行计划会被高速缓存到内中
如果 传递@Table = btable 时将不使用头一次的执行计划了吧?如果传递的参数不只一个那每一次的查询都不相同。这个每次都要使用with recompile来创建新的执行计划吗?

解决方案 »

  1.   

    with recompile的主要目的是强制数据库引擎重新生成执行计划,一般情况下无需这样做。
    参数的具体数值改变时(比如简单的数据类型),一般是不用重新生成执行计划的,
    但如果你的参数会改变很多(比如像你的例子中是一个表),就可能需要新的执行计划。
      

  2.   

    向参数字段名称的改变就不可使用with recompile了吧。一个存储过程无法针对多个表。这样的话效率依然也会变底了?